非root权限Linux编译Caffe出现链接库缺失报错求助
解决非root权限下Caffe编译的
cannot find链接错误 嘿,这个问题我之前帮朋友排查过好几次——本质就是编译时链接器ld找不到对应的依赖库,尤其是非root安装的情况下,很多库不会默认放到系统标准路径里。咱们一步步来解决:
1. 先确认依赖库的状态
首先检查这些缺失的库是不是已经装在你的用户目录里了(非root通常会把软件装在~/local或自定义路径):
- 用类似
find ~ -name "libglog.so"、find ~ -name "libhdf5_hl.so"的命令,看看有没有对应的动态库文件。 - 如果找不到,说明你需要先手动安装这些依赖(非root版本)。
2. 非root方式安装缺失的依赖
下面是每个报错库的具体安装步骤:
- glog:
git clone https://github.com/google/glog.git cd glog mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=~/local # 指定安装到用户目录下的local文件夹 make -j8 && make install - HDF5(包含hdf5和hdf5_hl):
下载HDF5源码包解压后执行:./configure --prefix=~/local --enable-shared make -j8 && make install - snappy:
git clone https://github.com/google/snappy.git cd snappy mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=~/local make -j8 && make install - ATLAS/CBLAS:
系统自带的ATLAS可能没有安装,非root环境更推荐编译OpenBLAS替代:
注意:安装完OpenBLAS后,需要修改Caffe的git clone https://github.com/xianyi/OpenBLAS.git cd OpenBLAS make -j8 PREFIX=~/local make installMakefile.config,把BLAS := atlas改成BLAS := open,同时添加:BLAS_INCLUDE := ~/local/include BLAS_LIB := ~/local/lib
3. 让Caffe编译脚本找到你的库
修改Caffe根目录下的Makefile.config文件,告诉编译脚本你的依赖库位置:
- 找到
INCLUDE_DIRS,追加你的用户库头文件路径:INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include ~/local/include - 找到
LIBRARY_DIRS,追加你的用户库路径:LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib ~/local/lib
4. 重新编译
先清理之前的编译缓存,再重新执行编译命令:
make clean make all -j8
额外小技巧
如果还是出现找不到库的错误,可以临时把你的用户库路径加到链接器的搜索路径里:
export LD_LIBRARY_PATH=~/local/lib:$LD_LIBRARY_PATH
执行完这条命令后再重新编译,链接器就会优先搜索你用户目录下的库文件了。
内容的提问来源于stack exchange,提问作者SimpleNotGood
相关产品推荐
相关产品推荐

