linux下如何知道链接程序时链接 (使用)的库的绝对路径-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

2016-06-17 17:41:59 3260 1

我编译的程序需要使用库A/B/C,库A和B也依赖C,使用cmake生成的makefile中的命令是g++ xxx -lA -lB -lC xxx,这样链接出的程序有BUG,运行时库C报错.
修改cmake使命令变成g++ xxx -L/usr/local/lib -lA -lB -lC xxx后,之前的BUG就没有了.

不知道链接的是动态库还是静态库,所以不知道是链接的哪个库有问题.

所以问题是如何查出链接的库文件的绝对路径.

不好意思,可能没有表达清楚,我再说详细一些.
我的程序依赖gstreamer(一个多媒体框架),使用pkg-config --libs gstreamer-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 **: PCRE library is compiled without UTF8 support
** (xxxxx:5262): WARNING **: Compilation of mdvd regex failed: PCRE library is compiled without UTF8 support
查了一下,上面的错误是因为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)
取消 提交回答
全部回答(1)
  • 西秦说云
    2019-07-17 19:43:18

    运行时找不到库,肯定是共享库找不到了。
    ldd xxx
    可以查看可执行文件的共享库的依赖情况。

    补充:
    估计链接器的默认搜索路径里面有一个不支持utf-8的库文件。执行时候出错。添加了-L /usr/local/lib之后,链接器到新的搜索路径下面找到了支持utf-8的库文件。执行成功。你用ldd看一下你两次链接出来的可执行文件的共享库情况吧。

    0 0
相关问答

30

回答

云计算之路:为什么要选择云计算

cnblogs 2013-03-27 10:22:27 144404浏览量 回答数 30

170

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 232106浏览量 回答数 170

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 159370浏览量 回答数 145

24

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 657734浏览量 回答数 24

39

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 262803浏览量 回答数 39

295

回答

Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

qilu 2014-09-25 13:26:50 437629浏览量 回答数 295

251

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 309233浏览量 回答数 251

97

回答

Redhat/CentOS一键安装web环境全攻略

xiaofanqie 2011-08-11 14:51:38 124705浏览量 回答数 97

40

回答

阿里云ecs从购买到环境搭建和建站!!(phpstudy一件包)

梦丫头 2014-07-29 20:51:49 163645浏览量 回答数 40

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 483151浏览量 回答数 24
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载