[LatinaLUG] Problemino con un linker

Frank Reker frank@reker.net
Mar 30 Mar 2004 18:24:26 CEST


Roberto Polli disse:
> Ciao a tutti!
> come butta?
> Io qui ho un problemino con un linker.
> Dato un file in fortran creo l'object file e poi lo linko modificando i
> riferimenti a delle librerie, ma non funge.
> Ecco i passaggi:
> 1) creo l'oggetto prova.o
> 	#f77 -c prova.f
> 2) collego
> 	#ld -w0 -O4 -g0 prova -non_shared new_crt0.o
> /usr/lib/cmplrs/fort90/for_main.o prova.o libckpt.a -qlshpf -lUfor -lfor
> -lFutil -lm -lots -lm_c32 -lmld  -lc
>
> Tutto cio' non funziona sulla release 5.1b di tru64 mentre su quelle
> precedenti e' tutto ok.
>
> L'errore restituito e':
> /usr/ccs/lib/libc.a(f64_fstat.o): __F64_fstat: multiply defined
>
> in effetti il simbolo __F64_fstat: e' definito anche in altri file:

in quale ?!

> ho provato anche ad eliminare la libreria f64_fstat.o dalle libc creando
> una libc opportunamente modificata, ma ottengo l'errore opposto:
> undefined symbol.

1) prova scambiare l'ordine dei lib linkato. (-lc al inizio). Per
alcuni linker l'ordine e` importante. Cmq. questo risolvera il
undefined symbol per __F64_fstat, ma ti crea altri undefined symbol,
pero` almeno sai se l'ordine e` importante o no.

2) dici al linker di trattare quel simbolo come undefined dopo
l'inclusione della lib dove apare la prima volta. Se mi ricordo bene,
l'opzione
-u lo fa.

3) scriviti un proprio linker script ;-))

4) usa il commando ar per creare una grande libreria che contienne
tutte le libs da linkare. Prima estrarre tutti i file object in un
directory e poi riunirli in un singolo file .a  Dopo chiami il linker.
Puoi anche automatizarlo nel make file.


-- 
Don't worry be happy ...
Ciao Frank


Maggiori informazioni sulla lista latina