即使使用-l也找不到静态库符号

时间:2011-02-15 22:41:54

标签: c linker-errors

我有一个没有共享库的静态库liborc-0.4.a。我有另一个库,libschroedinger-1.0.a(没有共享)依赖于liborc-0.4.a中的符号。如果我在liborc-0.4.a上运行nm,则orc_init等符号显示为T(表示已定义)。我使用命令行标志-lorc-0.4构建了libschroedinger-1.0.a,所以它看到符号并且没问题。

但是,现在我有一个小的可执行文件,它依赖于libschroedinger-1.0.a。它编译得很好,但是当我运行链接器时

gcc -lschroedinger-1.0 -lorc-0.4 -o output input.o

它会出现以下错误:

/usr/local/lib/libschroedinger-1.0.a(libschroedinger_1.0_la-schro.o):schro.c:(.text+0x21):
undefined reference to `orc_init'

2 个答案:

答案 0 :(得分:9)

gcc对库的顺序很敏感。当它正在编译liborc-0.4.a时,不需要orc_init,所以它不包括在内。解决方案是将LDFLAGS放在命令的末尾:

gcc -o output input.o -lschroedinger-1.0 -lorc-0.4

答案 1 :(得分:0)

您最有可能使用共享liborc编译libschroedinger。静态库与归档中的一堆目标文件相同,因此它们不需要查看多个标题。写如下以确保(与liborc相同的苹果)。

gcc /path/to/libschroedinger-1.0.a /path/to/liborc-0.4.a -o output input.o