[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