【发布时间】:2014-07-24 10:48:45
【问题描述】:
我在一个可执行项目中使用它链接不同库时遇到问题。
假设项目 A 包含一个名为 foo() 的函数;它被编译为静态库。
项目 B 包含一个名为 bar() 的函数,包括来自 A 的头文件并编译为与 -Wl、--whole-archive libA.a -Wl、--no-whole-archive flags 的共享库。
libB.so 已移至 /usr/lib。
现在,项目C包含B.h,调用bar(),但由于未定义对项目A中定义的foo()函数的引用而没有编译。
nm libB.so 说:
U foo
我用的是gcc,编程语言是C,IDE是Eclipse CDT。
有没有人有解决这个问题的想法或技巧?
谢谢。
【问题讨论】:
-
“nm
”是什么意思? -
@Icarus3:上面写着 T foo()
-
那很好。现在你可以使用 gcc 命令行来构建共享对象了吗?我问的原因是,我在最后尝试了这个,“nm
”显示“T foo”。因此,在构建共享对象时一定会发生一些奇怪的事情。 -
@Icarus3 这里是:gcc -Wl,--whole-archive /usr/lib/libA.a -Wl,--no-whole-archive -shared -o "libB.so" ./sys/sys_confs.o ...其他目标文件... ./mpt_srvlib.o -lssl -lm -lrt -lpthread
-
抱歉,我无法在最后重现此内容。只是为了我使用 gcc-4.8.2 的信息。
标签: c linker shared-libraries static-libraries inclusion