通过直接添加或者手动编译添加库,解决 library not found for -lxxx 等的问题
来源:互联网 发布:java开发实战经典答案 编辑:程序博客网 时间:2024/05/22 07:58
前言
本文基本上能完美解决这种库文件无法找到问题。
文中以IceUtil
库为例子,你可以推广到其他库,方法相同。
问题描述
在 Mac 下用 Homebrew 安装 ZeroC Ice 这个中间件后发现 IceUtil 库缺失,IDE 报了个链接错误,如下图:
问题分析
这个问题是说链接器在链接的时候找不到 IceUtil 这个库,那我们就告诉它(添加库的路径),让它找到就好啦!
扩展:
静态库无法链接报错:
library not found for -lxxx
动态库无法装载报错:
dyld: library not loaded …/libxxx.dylib
解决办法
方法一:直接添加库
通常解决办法是:库存在,直接添加路径。
也就是通常遇到这个问题的时候,库是已经编译安装好了的,但是 IED 不能找到。这样的话就直接添加库的路径就好了。
第一步:找库
第一步,自己找到这个库。
库一般放在系统默认处或者安装到特定地方。
Linux 系统默认库放在:
/lib/usr/lib/usr/local/lib...
安装到特定地方,如我 Mac 的用 Homebrew 安装到:
/usr/local/Cellar/ice/3.7.0/lib
第二步:添加路径
添加库一般以下三种方法任选其一:
- 系统环境变量添加
- 系统级:修改
/etc/profile
或者/etc/bashrc
- 用户级:修改
~/.bashrc
或者~/.bash_profile
- 系统级:修改
#添加库的bin文件夹路径export PATH =$PATH:$HOME/bin#添加到gcc头文件export C_INCLUDE_PATH=$C_INCLUDE_PATH:/MyLib#添加到g++头文件路径export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/MyLib#添加到动态库export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib#添加到静态库export LIBRARY_PATH=$LIBRARY_PATH:/MyLib
IED 编译环境添加
因 IDE 不同而不同,如 Qt 在
项目
-构建设置
-构建环境
处添加具体请参考:QT 无法链接动态库 dyld library not loaded … libhdf5.100.dylib
代码添加
# 如 Qt pro 文件添加LIBS += -L/usr/local/Cellar/ice/3.7.0/lib -lIceUtil
这样,IDE就能找到库啦!
方法二:手动编译添加库
若是你的库不存在,也就是说安装的时候没有编译生成这个库文件或者安装后莫名的不见了,这样只能重新安装或者手动编译添加库。以下讲手动编译添加库。
思路是:找库,如果找不到,手动编译生成库文件,拷贝到库文件目录,用上面添加路径
的方法添加路径让IDE找到。
第一步:找库
对的,还是要找找的,不然怎么知道没有呢![捂脸]
可以在一些常放库的文件夹下找,尽量靠近根目录,如:
sudo find /usr -name "libIceUtil*"
扩展:
如果找到名为libIceUtil.3.7.0.a
的库,但是找不到libIceUtil.a
的库,可以试着拷贝libIceUtil.3.7.0.a
库成名为libIceUtil.a
的库
cp ./libIceUtil.3.7.0.a ./libIceUtil.a
这个方法适用于:
- 同版本下,缺失没版本号的库文件
- 不同版本下,库文件没因为版本的改变而发生改变
第二步,手动编译
#因为IceUtil是Ice的库,所以克隆下Ice来git clone https://github.com/zeroc-ice/ice.git#因为我需要的是C++版cd ice/cpp#直接编译make
编译好后就能找到这个库了:cpp/lib/libIceUtil.a
其他库请参考官方的编译安装教程
附:Building Ice for C++ on macOS
第三步,拷贝库到安装后的文件夹
到ice/cpp/lib
目录下:
cp ./libIceUtil.a /usr/local/Cellar/ice/3.7.0/lib
第四步:添加路径
上面已经说了三种方法,这里直接代码添加:
# 如 Qt pro 文件添加LIBS += -L/usr/local/Cellar/ice/3.7.0/lib -lIceUtil
这样就解决了!
唠叨
以上这些方法基本上能完美解决这种库文件无法找到问题,如果有本文没有提及的欢迎留言讨论。
- 通过直接添加或者手动编译添加库,解决 library not found for -lxxx 等的问题
- 关于问题ld:library not found for -lXXX 和ld:warning:directory not found option 以及duplicate symbol的解决办法
- 关于问题ld:library not found for -lXXX 和ld:warning:directory not found option 以及duplicate symbol的解决办法
- 关于问题ld:library not found for -lXXX 和ld:warning:directory not found option 以及duplicate symbol的解决办法
- 关于问题ld:library not found for -lXXX 和ld:warning:directory not found option 以及duplicate symbol的解决办法
- 添加第三方库出现library not found for - "解决办法
- ld: library not found for -lXXXXX 编译问题的解决方法
- ld: library not found for -lXXXXX 编译问题的解决方法
- "ld: library not found for -l...." 问题的解决
- 解决 ld: library not found for -lPods的问题
- "ld: library not found for -l...." 问题的解决
- "ld: library not found for -l...." 问题的解决
- ld: library not found for -lxxx 报错 iOS
- iOS经典错误library not found for -lXXX
- cocoapods 配置私有库遇到的library not found for -l编译报错问题
- library not found for -lz.1.2.3 编译错误 解决
- 解决library not found for -lPods-AFNetworking问题
- 使cocopods管理开源库编译出现Library not found for -lPods问题的解决方法
- maven学习笔记:命令行模式创建java_spark项目并运行示例程序
- 脚本语言
- php对redis操作详解[转]
- unity 调用jar Multiple dex files define
- 基于zookeeper的分布式锁实现
- 通过直接添加或者手动编译添加库,解决 library not found for -lxxx 等的问题
- 汇哲科技CISM每日一题
- C++编程音视频库ffmpeg的pts时间换算方法
- oracle11g scanip 负载均衡测试
- 临渊慕鱼,不如退而结网
- 三个电脑办公小技巧
- poj2796 (单调栈)
- Java基础总结(三)
- the specified jre installation does not exist 不存在指定的JRE安装