ubuntu下c++編譯連結caffe的工程
最近在做深度網路相關的專案,我們通常可以從github上download很多相關的原始碼,但是在我們的機子上編譯的時候通常會遇到很多問題,將我最近踩的坑做了一些總結,希望對大家有所幫助。
1.如果直接g++ ×××.cpp 出現下面或者是出現某種語法錯誤之類的
[Click and drag to move]
一般來說是你的編譯器沒有滿足c++11規則,此時一般要加上-std=c++11
2.好吧,你心想加上就好了,於是 g++ ×××.cpp -std=c++11於是出現了:
××××××cannot find caffe/caffe.h:×××××××
這時候你想起來了你caffe的庫目錄和你係統預設的包含庫目錄不一致,連結庫也是不一樣的,然後你就想加進來啊
於是:
g++ ××××.cpp -std=c++11 -I /path/to/caffe/include -L/path/to/caffe/build/lib/
結果還是不行,又一大堆啥沒定義。。。
這時候那個氣啊
其實我們可以這麼做 1.確保本機安裝caffe 參考:https://blog.csdn.net/QLULIBIN/article/details/80722788 從第7點開始看,特別注意的是那些依賴庫沒裝的要記得裝上 當然你可以參考官網:http://caffe.berkeleyvision.org/installation.html 記得測試下再進行下一步
2.確保安裝openblas 參考:https://blog.csdn.net/y5492853/article/details/79558194
3.進入/caffe/path/include/caffe 檢視是否有proto資料夾 如果沒有的話: 將/caffe/path/build/src/caffe/ 下的proto 資料夾拷貝到上述目錄下 4.1 將/caffe/path/build/lib/libcaffe.so與libcaffe.so.1.0.0-rc3複製到 /usr/lib下 4.2 將/caffe/path/include/下的整個caffe資料夾複製到 /usr/include 下
5.執行資料夾內的makefile(記得對照修改相應庫目錄,動態連結庫)
makefile檔案可以參照:
CC= g++ CFLAGS = -O3 -std=c++11 #CFLAGS = -ggdb
INCS = `pkg-config --cflags opencv` LIBS = `pkg-config --libs opencv` LIBS+=-lboost_system -lcaffe -lglog OBJS = mtcnn.o BIN =a INCS+=-I/usr/local/inluce #/path/to/openblas'inclue LIBS+=-L /usr/local/lib #/path/to/openblas'lib
all : $(BIN)
a: $(OBJS) $(CC) $(OBJS) -o [email protected] $(LIBS)
%.o:%.cpp $(CC) $(CFLAGS) $(INCS) -c $<
clean: rm -f $(OBJS) $(BIN)
然後
make 6.不出意外應該可以了 附:如果出現××× DSO is missing 首先locate下該檔案,如果存在,那就是放的位置不對,因為該檔案的連結路徑是/usr/lib 所以你得拷過來 如果出現某種語法不符合規則,那應該加上c++11的標準 如果出現一大堆的。。。。找不到之類的,別懷疑,肯定不是程式碼問題,這時候應該去找下你libs有沒有包含該庫。沒有的話 在makefile 檔案中LIBS+=-l*** 就可以了~~