在使用源码编译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
更新缓存。
暂无评论