在編譯caffe ssd過程中,由於嘗試anaconda進行caffe環境搭建,嘗試了過多方法,致使配置混亂,遂重新進行系統配置,並總結了可能會遇到的問題,記錄如下。
問題1及解決方案:
# 也就是下面$(q)後跟的位址,/usr/local/bin/protoc(whereis protoc找到自己安裝的位置)
$(proto_build_dir)/%
.pb.cc $(proto_build_dir)/%
.pb.h : \
$(proto_src_dir)/%
.proto | $(proto_build_dir)
@ echo protoc $<
$(q)
/usr/local/
bin/protoc -
-proto_path=$(proto_src_dir)
--cpp_out=$(proto_build_dir) $<
$(py_proto_build_dir)
/%_pb2.py : $(proto_src_dir)/%
.proto \
$(py_proto_init)
| $(py_proto_build_dir)
@ echo protoc \(python\) $<
$(q)
/usr/local/
bin/protoc -
-proto_path=$(proto_src_dir)
--python_out=$(py_proto_build_dir) $<
(2)降gcc,g++的版本
(cuda版本不能超過6.0,故選擇降至4.8,這個具體問題具體分析)
參考部落格 gcc/g++降至4.8
gcc -
-version # 檢視當前版本
sudo apt-get install gcc-
4.8ls /usr/
bin/gcc*
# 檢視已有的gcc版本,確認一下剛才4.8.5有沒有裝成功
# 某個版本加入gcc候選中,最後的數字是優先順序,我自己是直接設為100,沒任何問題
sudo update-alternatives -
-install /usr/
bin/gcc gcc /usr/
bin/gcc-
4.8100
sudo update-alternatives -
-config gcc # 顯示當前配置的gcc版本
# g++ 降級安裝同理,只需將gcc進行置換即可
# note:此時gcc --version,可能還是顯示的以前預設版本,但配置已經更改為gcc-4.8了,如果出現這種情況也不必驚慌,為啥出現這種情況,我也很費解。
降完版本,如果問題仍未解決,可能是protobuf未用現有gcc/g++進行編譯,可重新進行編譯,編譯可見安裝protobuf 2.6.1,記得make之前make clean一下,防止出錯。
問題2:
file 「/home/crj/caffe/python/caffe/init.py」, line 1, in
from .pycaffe import net, sgdsolver, nesterovsolver, adagradsolver, rmspropsolver, adadeltasolver, adamsolver
file 「/home/crj/caffe/python/caffe/pycaffe.py」, line 13, in
from ._caffe import net, sgdsolver, nesterovsolver, adagradsolver,
importerror: /home/crj/caffe/python/caffe/_caffe.so: undefined symbol: _zn5caffe9sgdsolverife19snapshotsolverstateerkss
解決方法:
# 分析原因:忘記實現make test,重新執行以下步驟可實現import caffe成功
make clean
make all
-j16
make pycaffe
make test
make runtest
問題3:
出錯error:
nvcc src/caffe/test/test_im2col_kernel.cu
/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h(436): error: identifier 「nullptr」 is undefined
/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h(436): error: expected a 「;」
/usr/include/x86_64-linux-gnu/c++/6/bits/c++config.h(205): error: expected a 「;」
/usr/include/c++/6/exception(63): error: expected a 「;」
/usr/include/c++/6/exception(69): error: expected a 「;」
解決方法:
這個在網上查到的解決方案是gcc的版本問題,但是在caffe進行編譯前,已經將gcc降到了gcc-4.8版本,
本不應有此問題,故重新make clean編譯了一遍,成功。
問題4:
出錯error:
ar -o .build_release/lib/libcaffe.a
ld -o .build_release/lib/libcaffe.so.1.0.0-rc3
/usr/bin/x86_64-linux-gnu-ld: 找不到 -lopenblas
collect2: error: ld returned 1 exit status
makefile:568: recipe for target 『.build_release/lib/libcaffe.so.1.0.0-rc3』 failed
make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] error 1
解決方法:
sudo apt-get install liblapack-dev liblapack3 libopenblas-base libopenblas-dev
問題5:
出錯error:
cxx/ld -o .build_release/tools/upgrade_net_proto_binary.bin
.build_release/lib/libcaffe.so:對『boost::re_detail_106501::verify_options(unsigned int, boost::regex_constants::_match_flags)』未定義的引用
解決方法:
# 修改下面makefile檔案#中的內容
# libraries += glog gflags protobuf boost_system boost_filesystem boost_regex m hdf5_hl hdf5
libraries += glog gflags protobuf boost_system boost_filesystem boost_regex m hdf5_serial_hl hdf5_serial
問題6
這裡附乙個在裝cuda時遇到的問題
sudo apt-get install cuda
出錯error:
依賴: cuda-9-0 (>= 9.0.176) 但是它將不會被安裝 無法修正錯誤,因為您要求某些軟體包保持現狀,它們破壞了軟體包間的依賴關係
這個問題,總結了一下,最可能出現的原因是,使用系統附加專有驅動引起的,網上一堆說是軟體更新的鍋,試了一下,均不好使,故放棄了專有驅動,自己重新進行安裝nvidia-390,解決了該問題。參考上篇部落格下的安裝gpu版本的tensorflow部分。
也總結下nvidia-smi命令後,顯示的驅動安裝失敗的問題。
(1)按上述步驟進行重新install nvidia-390
(2)在軟體和更新上的附加驅動中,選擇專有驅動nvidia-390
記得sudo reboot進行重啟,如果發現安裝成功,但是仍無效,你可能是忘記了重啟。
重啟過程中,藍屏介面選擇enroll mok ——continue——yes——密碼——reboot,注意(等待太久,藍屏介面自動過渡,同樣會不能成功)
ubuntu下caffe編譯錯誤彙總
題記 林林總總,編譯了不下十次,安裝系統,配顯示卡,驅動,cuda,cudnn也不下於七八次,每次都會有相同或者不同的錯誤,之前一直偷懶沒有記錄,導致每次都要重新搜,實為不便,在此記錄,回憶到就更。1.編譯caffe,在make all的時候報錯 caffe usr bin ld 找不到 lopen...
微軟Caffe編譯
3 使用vs2013開啟caffe.sln編譯自動安裝第三方庫。安裝過程中可能出現的錯誤 e nugetpackages boost.1.59.0.0 lib native include boost format alt sstream impl.hpp error c2220 警告被視為錯誤 沒...
caffe編譯問題
1.編譯提示一系列cudnn問題,caffe版本過舊,與新版cudnn不相容。解決 可嘗試替換 caffe root include caffe util cudnn.hpp以及 caffe root src caffe layers下面名字以cudnn開頭的檔案為最新版caffe內的檔案,最新版c...