解决C++编译时报错:ld: cannot find -lxxx方法

编译程序有时会遇到“ld: cannot find -lxxx”的错误,就是链接器说找不到xxx库。一般先使用如下命令查找系统中是否存在xxx库而ld程序未找到(以zlib为例):

$ ld -lzlib --verbose

输出如下信息:

====================================
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.a faile
dattempt to open /usr/local/lib64/libzlib.so failed
attempt to open /usr/local/lib64/libzlib.a failed
attempt to open /lib64/libzlib.so failed
attempt to open /lib64/libzlib.a failed
attempt to open /usr/lib64/libzlib.so failed
attempt to open /usr/lib64/libzlib.a failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.a failed
attempt to open /usr/local/lib/libzlib.so failed
attempt to open /usr/local/lib/libzlib.a failed
attempt to open /lib/libzlib.so failed
attempt to open /lib/libzlib.a failed
attempt to open /usr/lib/libzlib.so failed
attempt to open /usr/lib/libzlib.a failed
/usr/bin/ld.bfd.real: cannot find -lzlib
=====================================

此时说明系统中确实未安装zlib库,则下载安装zlib库,并将安全路径加到LD_LIBRARY_PATH即可。

另一种情况,系统中存在库而ld程序未找到,如:

$ ld -lglog --verbose

输出如下信息:

==================================================
attempt to open //usr/x86_64-redhat-linux/lib64/libglog.so failed
attempt to open //usr/x86_64-redhat-linux/lib64/libglog.a failed
attempt to open //usr/lib64/libglog.so failed
attempt to open //usr/lib64/libglog.a failed
attempt to open //usr/local/lib64/libglog.so failed
attempt to open //usr/local/lib64/libglog.a failed
attempt to open //lib64/libglog.so failed
attempt to open //lib64/libglog.a failed
attempt to open //usr/x86_64-redhat-linux/lib/libglog.so failed
attempt to open //usr/x86_64-redhat-linux/lib/libglog.a failed
attempt to open //usr/local/lib/libglog.so succeeded
-lglog (//usr/local/lib/libglog.so)
libgflags.so.2.2 needed by //usr/local/lib/libglog.so
found libgflags.so.2.2 at //usr/local/lib/libgflags.so.2.2
libpthread.so.0 needed by //usr/local/lib/libglog.so
found libpthread.so.0 at //usr/lib64/libpthread.so.0
libstdc++.so.6 needed by //usr/local/lib/libglog.so
found libstdc++.so.6 at //usr/local/lib64/libstdc++.so.6
libm.so.6 needed by //usr/local/lib/libglog.so
found libm.so.6 at //usr/lib64/libm.so.6
libc.so.6 needed by //usr/local/lib/libglog.so
found libc.so.6 at //usr/lib64/libc.so.6
libgcc_s.so.1 needed by //usr/local/lib/libglog.so
found libgcc_s.so.1 at //usr/lib64/libgcc_s.so.1
ld-linux-x86-64.so.2 needed by //usr/lib64/libpthread.so.0
found ld-linux-x86-64.so.2 at //usr/lib64/ld-linux-x86-64.so.2
ld: warning: cannot find entry symbol _start; not setting start address

此时说明系统中安装了glog库,但是ld程序未找到。

一种方法是将glog库的路径加到LD_LIBRARY_PATH环境变量中,另一种方法是直接加编译器选项进行编译:

gcc -L/usr/lib64 -lglog

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值