linux下如何知道链接程序时链接 (使用)的库的绝对路径

我编译的程序需要使用库A/B/C,库A和B也依赖C,使用cmake生成的makefile中的命令是g++xxx-lA-lB-lCxxx,这样链接出的程序有BUG,运行时库C报错.
修改cmake使命令变成g++xxx-L/usr/local/lib-lA-lB-lCxxx后,之前的BUG就没有了.
不知道链接的是动态库还是静态库,所以不知道是链接的哪个库有问题.
所以问题是如何查出链接的库文件的绝对路径.
不好意思,可能没有表达清楚,我再说详细一些.
我的程序依赖gstreamer(一个多媒体框架),使用pkg-config--libsgstreamer-0.10的输出结果是
-pthread-L/usr/local/lib-lgstreamer-0.10-lgobject-2.0-lgmodule-2.0-lgthread-2.0-lrt-lxml2-lglib-2.0
之前使用cmake来编译,在CMakeLists.txt的LINK_DIRECTORIES中没有添加目录/usr/local/lib,这样编译链接出的程序在播放某些媒体文件时报错(不是一运行就提示找不到库),信息如下:
(xxxxx:5262):GLib-CRITICAL**:PCRElibraryiscompiledwithoutUTF8support
**(xxxxx:5262):WARNING**:Compilationofmdvdregexfailed:PCRElibraryiscompiledwithoutUTF8support
查了一下,上面的错误是因为glib-2.0库中使用的PCRE库不支持utf-8
后来,我在CMakeLists.txt的LINK_DIRECTORIES中添加了目录/usr/local/lib(这样生成的makefile中就有了-L/usr/local/lib),于是之前PCRE不支援utf-8的警告不再出现,那些媒体文件也能正常播放了.
感谢各位的回答,下面贴一下ldd的结果
编译时指定库路径/usr/local/lib:
libgstreamer-0.10.so.0=>/usr/local/lib/libgstreamer-0.10.so.0(0xb7669000)
libgio-2.0.so.0=>/usr/local/lib/libgio-2.0.so.0(0xb74fe000)
libgobject-2.0.so.0=>/usr/local/lib/libgobject-2.0.so.0(0xb74ae000)
libglib-2.0.so.0=>/usr/local/lib/libglib-2.0.so.0(0xb7382000)
libpthread.so.0=>/lib/i386-linux-gnu/libpthread.so.0(0xb734f000)
libxml2.so.2=>/usr/lib/i386-linux-gnu/libxml2.so.2(0xb7202000)
libstdc++.so.6=>/usr/lib/i386-linux-gnu/libstdc++.so.6(0xb711d000)
libgcc_s.so.1=>/lib/i386-linux-gnu/libgcc_s.so.1(0xb70fe000)
libc.so.6=>/lib/i386-linux-gnu/libc.so.6(0xb6f54000)
libgmodule-2.0.so.0=>/usr/local/lib/libgmodule-2.0.so.0(0xb6f4f000)
libm.so.6=>/lib/i386-linux-gnu/libm.so.6(0xb6f23000)
librt.so.1=>/lib/i386-linux-gnu/librt.so.1(0xb6f1a000)
libdl.so.2=>/lib/i386-linux-gnu/libdl.so.2(0xb6f14000)
libz.so.1=>/lib/i386-linux-gnu/libz.so.1(0xb6efe000)
libselinux.so.1=>/lib/i386-linux-gnu/libselinux.so.1(0xb6edf000)
libresolv.so.2=>/lib/i386-linux-gnu/libresolv.so.2(0xb6ec7000)
libffi.so.6=>/usr/lib/i386-linux-gnu/libffi.so.6(0xb6ec0000)
/lib/ld-linux.so.2(0xb7753000)
编译时不指定库路径/usr/local/lib:
libgstreamer-0.10.so.0=>/usr/lib/i386-linux-gnu/libgstreamer-0.10.so.0(0xb760d000)
libgio-2.0.so.0=>/usr/lib/i386-linux-gnu/libgio-2.0.so.0(0xb74b6000)
libgobject-2.0.so.0=>/usr/lib/i386-linux-gnu/libgobject-2.0.so.0(0xb7466000)
libglib-2.0.so.0=>/lib/i386-linux-gnu/libglib-2.0.so.0(0xb736d000)
libpthread.so.0=>/lib/i386-linux-gnu/libpthread.so.0(0xb7352000)
libxml2.so.2=>/usr/lib/i386-linux-gnu/libxml2.so.2(0xb7205000)
libstdc++.so.6=>/usr/lib/i386-linux-gnu/libstdc++.so.6(0xb7120000)
libgcc_s.so.1=>/lib/i386-linux-gnu/libgcc_s.so.1(0xb7101000)
libc.so.6=>/lib/i386-linux-gnu/libc.so.6(0xb6f57000)
libgmodule-2.0.so.0=>/usr/lib/i386-linux-gnu/libgmodule-2.0.so.0(0xb6f52000)
libm.so.6=>/lib/i386-linux-gnu/libm.so.6(0xb6f26000)
librt.so.1=>/lib/i386-linux-gnu/librt.so.1(0xb6f1d000)
libdl.so.2=>/lib/i386-linux-gnu/libdl.so.2(0xb6f17000)
libz.so.1=>/lib/i386-linux-gnu/libz.so.1(0xb6f01000)
libselinux.so.1=>/lib/i386-linux-gnu/libselinux.so.1(0xb6ee2000)
libresolv.so.2=>/lib/i386-linux-gnu/libresolv.so.2(0xb6eca000)
libffi.so.6=>/usr/lib/i386-linux-gnu/libffi.so.6(0xb6ec3000)
libpcre.so.3=>/lib/i386-linux-gnu/libpcre.so.3(0xb6e86000)
/lib/ld-linux.so.2(0xb770f000)
慕婉清6462132
浏览 384回答 2
2回答

慕容森

cat/etc/ld.so.conf.d/*看下里面的东西够不够?可以自己定义之后放进去的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript