caffe protobuf java_caffe 以及caffe2 安装时portobuf库相关的编译问题

安装caffe出现protobuf版本问题,是由于anaconda安装了不同的protobuf版本

pip show protoc

protoc --version

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install --no-install-recommends libboost-all-dev

sudo apt-get install python-protobuf

出现icu相关的问题,重新编译安装

protobuf自己编译时出现a local symbol' can not be used when making a shared object; recompile with -fPIC错误

问题原因

是用了protobuf默认的安装方式(以下代码),如此生成的静态库libprotobuf.a不是PIC object,所以不能被其它库使用(64位的so必须使用-fPIC编译选项,所以要求所链接的静态库也必须是-fPIC编译)。

./autogen.sh

./configure --prefix=INSTALL_PTAH

./make

./make install

解决方法

confiure步骤时加上两个变量参数:

./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC --prefix=INSTALL_PATH

注意重新配置后需要make clean 清除一下原有的生成文件才有用

编译caffe2出现from google.protobuf import symbol_database as _symbol_database错误

问题原因

编译的protobuf没有安装到python环境中

解决方法

按照上述方法下再protobuf3.5.0版本后重新安装

cd PROTOBUF_PATH/python

python setup.py build

sudo python setup.py isntall

编译caffe2出现以下问题

../lib/libgtest.a(gtest-all.cc.o):在函数‘testing::internal::FormatDeathTestOutput(std::string const&)’中:

gtest-all.cc:(.text+0xca9):对‘std::__throw_out_of_range_fmt(char const*, ...)’未定义的引用

gtest-all.cc:(.text+0xce3):对‘std::__throw_out_of_range_fmt(char const*, ...)’未定义的引用

../lib/libgtest.a(gtest-all.cc.o):在函数‘testing::TestResult::GetTestPartResult(int) const’中:

gtest-all.cc:(.text+0x1faf):对‘std::__throw_out_of_range_fmt(char const*, ...)’未定义的引用

../lib/libgtest.a(gtest-all.cc.o):在函数‘testing::TestResult::GetTestProperty(int) const’中:

gtest-all.cc:(.text+0x230f):对‘std::__throw_out_of_range_fmt(char const*, ...)’未定义的引用

../lib/libgtest.a(gtest-all.cc.o):在函数‘testing::internal::UnitTestImpl::ConfigureStreamingOutput()’中:

gtest-all.cc:(.text+0x1bffe):对‘std::__throw_out_of_range_fmt(char const*, ...)’未定义的引用

../lib/libgtest.a(gtest-all.cc.o):gtest-all.cc:(.text+0x1d2d7): 跟着更多未定义的参考到 std::__throw_out_of_range_fmt(char const*, ...)

../lib/libcaffe2.so:对‘std::thread::_M_start_thread(std::shared_ptr<:thread::_impl_base>, void (*)())’未定义的引用

../lib/libcaffe2.so:对‘__cxa_throw_bad_array_new_length’未定义的引用

问题原因

ubuntu14.0默认的gcc g++版本是4.8 需要升级到4.9

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

sudo apt-get update

sudo apt-get install gcc-4.9 g++-4.9

为Cmake 指定gcc g++版本

方法1:修改环境变量

修改环境变量,但是但是不一定都有用

export CC=/usr/local/bin/gcc-4.9

export CXX=/usr/local/bin/g++-4.9

方法2: 命令行设置cmake参数

cmake -D CMAKE_C_COMPILER=/usr/local/bin/gcc-4.9 -D CMAKE_CXX_COMPILER=/usr/local/bin/g++-4.9 ..

方法3:在CMakeList中设置变量

set(CMAKE_C_COMPILER "/usr/local/bin/gcc-4.9")

set(CMAKE_CXX_COMPILER "/usr/local/bin/g++-4.9")

判断caffe2是否安装成功,正常情况打印Success

cd ~ && python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"

判断GPU是否正常,正常情况打印值为1

python2 -c 'from caffe2.python import workspace; print(workspace.NumCudaDevices())'

自编译protobuf>=3.2.0

# CAFFE2=/path/to/caffe2

cd $CAFFE2/third_party/protobuf/cmake

mkdir -p build && cd build

cmake .. \

-DCMAKE_INSTALL_PREFIX=$HOME/c2_tp_protobuf \

-Dprotobuf_BUILD_TESTS=OFF \

-DCMAKE_CXX_FLAGS="-fPIC"

make install

编译caffe2时调用

cmake .. \

# insert your Caffe2 CMake flags here

-DPROTOBUF_PROTOC_EXECUTABLE=$HOME/c2_tp_protobuf/bin/protoc \

-DPROTOBUF_INCLUDE_DIR=$HOME/c2_tp_protobuf/include \

-DPROTOBUF_LIBRARY=$HOME/c2_tp_protobuf/lib64/libprotobuf.a

安装mxnet时出现libgfortran.so.1找不到的问题

ImportError: libgfortran.so.1: cannot open shared object file: No such file or directory

解决方法

conda install libgfortran=1

conda 可以指定安装版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值