共享库但未包含静态库的未定义参考错误

时间:2018-09-23 16:08:26

标签: linker

我在一个项目中有两个版本的库:静态库和共享库。

使用静态库时,下面的命令行可以完美运行。

/usr/bin/gcc  -O3 -DNDEBUG -m64 -lm CMakeFiles/acl_update_rate_demo_mp_bh.dir/acl_update_rate_demo.c.o  -o ../../bin/acl_update_rate_demo_mp_bh -rdynamic ../../lib/libtap.a ../../lib/libtap_mp.a ../../lib/libtapinit.a ../../lib/liballoc.a ../../lib/libportable.a

但是在下面的命令行中使用共享库

/usr/bin/gcc  -O3 -DNDEBUG -m64 -lm CMakeFiles/acl_update_rate_demo_mp_bh.dir/acl_update_rate_demo.c.o  -o ../../bin/acl_update_rate_demo_mp_bh -rdynamic ../../lib/libtap.so ../../lib/libtap_mp.so ../../lib/libtapinit.so ../../lib/liballoc.so ../../lib/libportable.so -lm -Wl,-rpath,/projects/tap/src/bld_rel/lib

我得到如下错误。

../../lib/libtapinit.so: undefined reference to pm_mem_read`'

我做了以下事情。

nm libtapinit.a | grep pm_mem_read

                 U pm_mem_read

nm libtapinit.so | grep pm_mem_read

                 U pm_mem_read

检查了组成各种库的C文件后,我发现libtapinit.a / so的C文件声明了一个'pm_mem_read'函数。 但是在所有C文件中,没有函数调用'pm_mem_read'

那么为什么链接只能用于静态库,而不能用于共享库?

0 个答案:

没有答案