[英]Static library symbols not being found even with -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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.