繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM