代码先锋网 代码片段及技术文章聚合

.build_release/lib/libcaffe.so:对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用

技术标签: caffe

ubuntu18.04 + cuda9+cudnnv7.5+gtx1060 。换了台新电脑,欣喜的配置深度学习环境,奈何问题频出阿!!!

在配置caffe  make all 的时候出现这个问题:

build_release/lib/libcaffe.so:对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
.build_release/lib/libcaffe.so:对‘leveldb::Status::ToString() const’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:625: recipe for target '.build_release/tools/upgrade_net_proto_text.bin' failed
make: *** [.build_release/tools/upgrade_net_proto_text.bin] Error 1
make: *** 正在等待未完成的任务....
.build_release/tools/extract_features.o:在函数‘std::string* google::MakeCheckOpString<int, int>(int const&, int const&, char const*)’中:
extract_features.cpp:(.text._ZN6google17MakeCheckOpStringIiiEEPSsRKT_RKT0_PKc[_ZN6google17MakeCheckOpStringIiiEEPSsRKT_RKT0_PKc]+0x50):对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
.build_release/tools/extract_features.o:在函数‘std::string* google::MakeCheckOpString<unsigned long, unsigned long>(unsigned long const&, unsigned long const&, char const*)’中:
extract_features.cpp:(.text._ZN6google17MakeCheckOpStringImmEEPSsRKT_RKT0_PKc[_ZN6google17MakeCheckOpStringImmEEPSsRKT_RKT0_PKc]+0x51):对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
.build_release/lib/libcaffe.so:对‘leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)’未定义的引用
.build_release/lib/libcaffe.so:对‘leveldb::Status::ToString() const’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:625: recipe for target '.build_release/tools/extract_features.bin' failed
make: *** [.build_release/tools/extract_features.bin] Error 1
.build_release/lib/libcaffe.so:对‘leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
.build_release/lib/libcaffe.so:对‘leveldb::Status::ToString() const’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:625: recipe for target '.build_release/tools/upgrade_solver_proto_text.bin' failed
make: *** [.build_release/tools/upgrade_solver_proto_text.bin] Error 1
.build_release/lib/libcaffe.so:对‘leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
.build_release/lib/libcaffe.so:对‘leveldb::Status::ToString() const’未定义的引用
collect2: error: ld returned 1 exit status

总之就是一堆关于google :probuf 的相关错误。这个问题https://blog.csdn.net/qq_33144323/article/details/81259985

上述博客说是由于protobuf的版本不对导致的,caffe能正确使用的是protobuf-2.6.1版本,而自带的版本是3.4.然后我把版本降低到2.5后,probuf 2.5下载   。发现仍然报错。

这篇博客说 https://blog.csdn.net/chenshuibiao/article/details/78734957 是因为gcc的版本问题。通过gcc -v 得知此时的版本是4.9 ,于是把版本升到5.5. 但是把gcc版本升级后仍然报错。

经过一番折腾后,终于解决。

首先,前面安装probuf 的时候使用的gcc版本是4.9,后面重新升级gcc版本后,相应的probuf 并没有发生重新编译,导致 make  all 的时候会出现乱码。

所以先卸载probuf ,

sudo apt-get remove libprotobuf-dev

如果以前有安装过的话,使用make clean清理一下原来的版本。

 

which protoc

运行完“which protoc”会显示一个protoc的路径,如果没有显示则下面这条命令不必执行
sudo rm /usr/local/bin/protoc

具体路径以“which protoc”显示的为准

到此,低版本的protobuf卸载完成。

然后查看 gcc 版本。gcc 的版本要大于5,如果gcc的版本小于5,则重新链接。通过下面的命令。改好之后可以再查看,看gcc的版本是不是5

gcc -v
sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc -f
sudo ln -s /usr/bin/g++-5 /usr/bin/g++ -f

重头戏开始了,重新安装probuf。可以参考该连接

进入到克隆的protobuf目录
cd protobuf
 ./autogen.sh
 ./configure
 make
// 如果没有克隆子模块,make check会失败但是可以继续make install,但是使用某些功能时可能会出错
 make check
 sudo make install
 sudo ldconfig
// 输出protobuf版本信息则表示安装成功
 protoc --version

官网写了,默认会安装到/usr/local路径下,但是/usr/local/lib不一定是系统路径LD_LIBRARY_PATH的一部分,因而或者将/usr/local/lib增加到系统路径LD_LIBRARY_PATH,或者指定安装路径。最好的就是指定安装到/usr路径(此时由于拷贝lib文件夹,实际上安装到/usr/lib路径),如下命令:

./configure --prefix=/usr      (我用的这个命令)

或者打开~/.profile # 打开配置文件在文件最后添加:
sudo gedit ~/.profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
whereis protoc                #查看那些路径下安装了protobuf   caffe 要求的版本是2开头的
which protoc                   #查看默认选用的protobuf
protoc --version             #查看当前默认的protobuf的版本
sudo protoc --version    #查看系统的protobuf的版本

然后再查看probuf的版本,这个时候是使用gcc 5.x的版本重新安装的probuf。安装结束后,重新进行编译。

首先 

make clean

sudo make all -j8

通过这个修改这次可以编译通过了。谢天谢地。

版权声明:本文为qq_33202928原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33202928/article/details/89884924

智能推荐

../lib/libcaffe.so.1.0.0-rc3:对‘H5LTget_dataset_ndims’未定义的引用

…/lib/libcaffe.so.1.0.0-rc3:对‘H5LTget_dataset_ndims’未定义的引用 …/lib/libcaffe.so.1.0.0-rc3:对‘H5LTmake_dataset_double’未定义的引用 …/lib/libcaffe.so.1.0.0-rc3:对&lsquo...

caffe 因为opencv版本混淆,报错:id_release/lib/libcaffe.so: cv::imread(cv::String const&, int)未定义’

编译caffe时报错 ild_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int) 报错原因: caffe默认使用opencv2.X版本,但是我的机器上安装的是opencv 3.2.0,这个3.2.0,也是默认装的,如果你按照教材,重新装最新的4.0以上的。这里也会出这个问题。这...

/usr/bin/ld: warning: libhdf5_hl.so.100, needed by .build_release/lib/libcaffe.so, not found (try us

参考自https://www.cnblogs.com/SweetBeens/p/8551625.html 如果出现错误看看文件是否存在,后面的100.1.0什么可以需要修改。去conda的lib搜索一般会出现三个文件,前面一样,后面有不同的后缀,选看起来最近的。。。...

编译py-caffe-Rcnn出现的问题(.build_release/src/caffe/syscedmem.o(.build_release/lib/libcaffe.so.1.0.0-rc3')

报错1 cudnn版本不匹配 解决方案:把caffe里面的所有与cudnn相关的.h 和.cpp 替换成第一次配置caffe时候 所用的cudnn的版本 具体操作: 第一部分: 用caffe-master/include/caffe/util (第一次配置caffe目录)下面的cudnn.hpp替换对应的旧版本cudnn.hpp 对应的cpp 文件为:用 caffe-master/src/caff...

.build_release/lib/libcaffe-nv.so: undefined reference to `tjDestroy'

编译 caffe 问题 首先查看系统有没有这个库: 我是如何知道是这个库的? 本地找到这个函数然后clion转到定义,显示到了usr/include/turbojpeg.h 显示系统是有这个库的, 再执行: export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH 还是报一样的错误。 然后我知道了,拿没有问题的makefi...

猜你喜欢

./../../lib/libcnstream_va.so.6.1.0:对‘cv::KalmanFilter::KalmanFilter()’未定义的引用

编译cnstream时报错 其中libcnstream_va.so.6.1.0是由cnstream里面的modules里面的文件编译而成的,因此在modules里面的CMakeList.txt里面增加如下内容 问题解决。...

cannot find -lopenblas make: *** [.build_release/lib/libcaffe-nv.so.0.17.0] Error 1 错误解决

/usr/bin/ld: cannot find -lopenblas collect2: error: ld returned 1 exit status Makefile:600: recipe for target '.build_release/lib/libcaffe-nv.so.0.17.0' failed make: *** [.build_release/lib/libcaffe-...

Caffe编译出现:Makefile:603: recipe for target '.build_release/lib/libcaffe-nv.so.0.16.6' failed

具体问题如下: 解决办法: 问题出在其中:/usr/bin/ld: cannot find -lopenblas 查询可知缺少openblas库 故安装就行,使用命令:sudo apt-get install libatlas-base libatlas-dev...

make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] 错误 1 问题解决

可能2. 修改Makefile 文件(注意不是)Makefile.config  将里面的 LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 改为LIBRARIES +=&...

/usr/local/lib/libopencv_imgcodecs.so.:对‘xxx@LIBTIFF_4.0’未定义的引用----解决方法

问题描述: 在编译PCL-octomap的c++工程文件时,遇到以下错误: 解决方案: 在CMakeLists.txt文件中,在 FIND_PACKAGE(OpenCV REQUIRED) 的前面加入opencv的路径,加入以下两句: 其中opencv的路径改成自己的绝对路径哈。 参考:https://blog.csdn.net/suyunzzz/article/details/101695824...