我在一个项目中有两个版本的库:静态库和共享库。
使用静态库时,下面的命令行可以完美运行。
/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'
那么为什么链接只能用于静态库,而不能用于共享库?