安裝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相關的問題,重新編譯安裝
http://www.linuxfromscratch.org/blfs/view/7.7/general/icu.html
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, 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 可以指定安裝版本