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

我有一个静态库,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' 

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

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

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

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