Portál AbcLinuxu, 16. července 2025 07:54
gcc -c mod_a.c
gcc -c mod_b.c
gcc -c mod_c.c
gcc -c mod_d.c
gcc -c mod_e.c
mod_a používá funkce definované v mod_d, mod_b používá fce z mod_e.
Při pokusu o slinkování
gcc -o mod_a -L. mod_a.o mod_b.o mod_c.o -L/path/to/lib -lm -ldl -lnsl
dostanu chybu v podobě nedefinovaných odkazů z mod_a.c na fce definované v mod_d.
Oč mi jde - potřeboval bych nakopnout správným směrem. Pokud tomu dobře rozumím, tak při překladu do objektového souboru se vytvoří tabulka referencí na funkce definované vně modulu, u kterých teda překladač nezná jejich adresu. Propojení odkazů z jednoho modulu s odpovídajícími funkcemi definovanými v jiném modulu je pak záležitost linkeru.
Proč mi linker jednotlivé moduly neslinkuje, když jsem mu jako parametr předal všechny "object-files" obsahující všechny používané funkce?
PS: Může na to mít vliv fakt, že některé z modulů byly napsané v lexu a odtud přeloženy? (.lex -> .c -> .o)?
gcc -o mod_a -L. mod_a.o mod_b.o mod_c.o -L/path/to/lib -lm -ldl -lnslKde máš ten mod_d ?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.