/usr/bin/ld: cannot find -lxxx问题汇总

在使用源码编译sysbench的时候遇到很多两次错误:/usr/bin/ld: cannot find -lxxx,Google的一番发现了一些这些错误的通用解决方法。

错误解释:

/usr/bin/ld: cannot find -lxxx

意思是编译过程找不到对应库文件。其中,-lxxx表示链接库文件 libxxx.so。

出现这种报错的原因一般有几种:

  • 系统缺乏对应的库文件;
  • 库文件的版本不对应;
  • 库文件的链接错误;
  • 库文件路径设置问题。

针对第一种第二种情况可以使用以下方式解决:

## RHEL/CentOS
$ yum provides "*/libxxx.so" ## 根据结果获得提供该库文件的软件包,然后安装

## Debian/Ubuntu
$ apt-cache search libxxx-dev

CentOS的示例:

比如在CentOS 6上出现错误: /usr/bin/ld: cannot find -lz

## 查询缺失库文件所对应软件包的名称 ##
$ yum provides "*/libz.so"
Loaded plugins: security
zlib-devel-1.2.3-29.el6.i686 : Header files and libraries for Zlib development
Repo        : base
Matched from:
Filename    : /usr/lib/libz.so



zlib-devel-1.2.3-29.el6.x86_64 : Header files and libraries for Zlib development
Repo        : base
Matched from:
Filename    : /usr/lib64/libz.so



zlib-devel-1.2.3-29.el6.x86_64 : Header files and libraries for Zlib development
Repo        : installed
Matched from:
Filename    : /usr/lib64/libz.so

## 基于上述的输出结果,安装相应的软件包 ##
$ yum -y install zlib zlib-devel

针对第三种错误,需要我们找到相对应正确的库文件做一个软连接就行了。

而针对第四种错误,举个例子,假如我们安装mysql到/opt/software/mysql目录下,mysql相关的库文件全部存放在/opt/software/mysql/lib下,当其他软件编译的过程中如果使用到mysql相关的库文件,就会报错,因为/opt/software/mysql/lib并不是一个默认的库文件存放路径,这个时候就需要们手动将该目录加相关的配置文件中;可以到/etc/ld.so.conf.d目录下,修改其中任意一份.conf后缀的文件,(可以新建一个,以方便识别)将lib所在目录写进去,然后在终端输入 ldconfig 更新缓存。

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload CAPTCHA.