即使使用-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