linux程序编译时指定的动态库没有链接进去,非常诡异

donwmufromdying 2014-09-24 11:45:30
我的Makefile中的LIBS += -L./ -Wl,-rpath=/usr/lib/,-rpath=./ -lhcnetsdk -lPlayCtrl -lMPCtrl
编译后ldd -r 结果如下:
 linux-gate.so.1 =>  (0xb7750000)
libhcnetsdk.so => /usr/lib/libhcnetsdk.so (0xb6e26000)
libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0xb6303000)
libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xb601b000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb5f25000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb5f07000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb5d5d000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb5d54000)
libhpr.so => /usr/lib/libhpr.so (0xb5b31000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb5b2c000)
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xb5b26000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb5b0b000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb5adf000)
libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0xb5adb000)
libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb59e2000)
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb59b8000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb59a2000)
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb5908000)
libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb58b8000)
libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xb58af000)
libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xb5895000)
libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xb588b000)
libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb5857000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb5844000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb5710000)
/lib/ld-linux.so.2 (0xb7751000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb56d4000)
libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xb56cd000)
libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb56a2000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb5681000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb567d000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb5676000)

可见 -lhcnetsdk链接正常,但是 -lPlayCtrl -lMPCtrl却没有链接进去,也没有报错
运行时能正常启动。但是某些功能缺因为没有PlayCtrl无法用
...全文
384 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2014-09-25
  • 打赏
  • 举报
回复
问题解决了,被提供动态库的给坑了。虽然大家都没回答正确,散分。 问题原因:三个动态库分别是第一个会用到第二个,第二个会使用第三个。第一个内部hardcode了导致的结果是在动态load第二个的时候失败,但是如果我在我的应用中显式调用第二个动态库中的某个函数,这样我的应用在编译时就显式链接后边两个库。运行时就一切正常了
Cody2k3 2014-09-25
  • 打赏
  • 举报
回复
楼主贴一下linking部分的cmdline就应该一目了然了
  • 打赏
  • 举报
回复
make sure the shared lib you indicated is on ldconfig path, if it's a newly installed, run #ldconfg to update the lib cache
hzyd_ 2014-09-24
  • 打赏
  • 举报
回复
看一下你的LDPATH有没有把那两个库包括进去

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧