我编译的程序需要使用库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)
添加回答
举报
0/150
提交
取消