作者s501082001 (曹草逼)
看板C_and_CPP
標題[問題] 編譯cpp檔發生未定義參考
時間Wed Jan 27 23:05:51 2016
參考網頁:
http://caffe.berkeleyvision.org/installation.html
電腦配備:Intel Xeon CPU E5-2620 @ 2.00GHz
GeForce GTX 950 / PCIe
64位元
底下有用分隔線,分隔線以上在說明是說明環境的建置,如果大家覺得文字太多可以
直接從分隔線以下開始看,因為怕文字說明太少,看不懂我在問甚麼,文字太多還請見諒
目前我依照上述的網頁來設定環境,從Ubuntu guide依序安裝了
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 libatlas-base-dev
sudo apt-get install python-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
再來從
https://developer.nvidia.com/cuda-downloads灌CUDA7.5的檔案
也確認了套件有安裝進去
opencv 從官網下載2.4.10版,opencv設定好後有去run內部的samples/c檔
確認ok,將環境都做好設定
__________________________________________________________________________
目前要做
http://caffe.berkeleyvision.org/gathered/examples/imagenet.html
網頁的步驟,然後目前要編譯一個" convert_imageset.cpp "將它轉成執行檔
為了將影像資料轉換caffe格式
編譯是用 gcc來編譯
然後編譯成objectfile檔是沒有問題的(gcc -c convert_imageset.cpp)
覺得應該不是標頭檔的問題
然後要編譯執行檔時" gcc convert_imageset.o -o convert_imageset " ,
會出現下面的錯誤
convert_imageset.cpp(.text+0x21):
未定義參考到「google::LogMessageFatal::LogMessageFatal(char const*,int)」
convert_imageset.cpp(.text_0x116):
未定義參考到「std::basic_string<char, std::char_traits<char>, std::allocator<char>」
然後google查詢後,有測試用gcc convert_imageset.o -I /usr/include -l /usr/lib
-o convert_imageset 將lib檔位置引入進來,發現錯誤沒解決,想請問未定義參考
的問題,是不是因為函式庫的部分還有哪裡沒有引入到,還是因為它linker不到程式庫?
麻煩解惑了,如果問得不清楚在麻煩跟我說,謝謝
註:只有編譯一個convert_imageset.cpp檔案,然後有先將caffe-master資料夾用make
指令做編譯,確認沒有問題
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.125.46.75
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1453907156.A.00F.html
推 LPH66: 編譯 c++ 的指令請用 g++, 有一些預設設定不一樣 01/27 23:09
→ s501082001: 好我在測試一下用g++編譯 01/27 23:55
→ tinlans: -l 跟 -L 大小寫也有差 01/28 00:05
→ s501082001: 您好, g++ convert_imageset.cpp -L/usr/lib 01/28 00:16
→ s501082001: -I/usr/include/ -o convert_imageset 01/28 00:17
→ s501082001: 指令這樣打完之後,還是有未定義參考問題,錯誤有減少 01/28 00:21
推 LPH66: 加上 -lglog 01/28 00:32
→ LPH66: 小寫的 -l 是引入 lib, 大寫的 -L 是指定去哪找 lib 01/28 00:32
→ LPH66: 雖然你已經安裝了 glog 但沒下 -lglog 時 g++ 不會知道你要 01/28 00:33
→ s501082001: 好謝謝我試試看 01/28 00:40
→ s501082001: g++ convert_imageset.o -o convert_imageset -lglog 01/28 01:12
→ s501082001: 出現 undefined reference to symbol '_ZN6google14Fl 01/28 01:13
→ s501082001: ag.....' error adding symbols: DSO missing from 01/28 01:14
→ s501082001: command line 01/28 01:14
→ s501082001: 目前在找解決方式 01/28 01:14
→ s501082001: 上述的錯誤加上 -gflags有解決 01/28 01:38
→ s501082001: 謝謝您,不過有一個未定義參考是寫boost::system錯誤 01/28 01:40
→ s501082001: 加上-lboost後反而出現 cannot find -lboost 01/28 01:41
→ s501082001: 但是有確定libboost有在裡面 01/28 01:41
推 andy13579372: 你是用makefile還是直接打g++ 01/28 02:02
→ tinlans: 我看過的 boost 好像沒有包成一大包 libboost.so 的版本 01/28 02:46
→ Neisseria: caffe 裡面有 cmake 相關的檔案,會比較好處理 01/28 09:23
→ s501082001: 我是用g++執行,經過查詢有找到一個libboost_system 01/28 21:29
→ s501082001: 有成功將編譯檔執行出來,謝謝大家的回覆 01/28 21:30
→ s501082001: To Neisseria 謝謝您的建議 01/28 21:33