2012-02-21 64 views
0

我在Ubuntu 11.10上運行OpenCV 2.3.1。我可以編譯我自己編寫的各種程序,但沒有問題。編譯OpenCV示例convert_cascade.cpp(OpenCV 2.3)

但是,現在我已經完成了一半的Haar級聯,我需要組裝到xml級聯文件中。爲此,我需要使用包含的示例程序convert_cascade.c。它不是默認編譯的,所以我需要這樣做。

這樣運行GCC失敗:

gcc -lopencv_core -lopencv_highgui -lopencv_objdetect -I/usr/local/include/opencv/ -L/usr/local/lib/ convert_cascade.c -o convert_cascade 

它給我以下錯誤:

/tmp/cc5UddX6.o: In function `cvRound': 
convert_cascade.c:(.text+0x19): undefined reference to `lrint' 
/tmp/cc5UddX6.o: In function `cvDecRefData': 
convert_cascade.c:(.text+0xb3b): undefined reference to `cvFree_' 
convert_cascade.c:(.text+0xbac): undefined reference to `cvFree_' 
/tmp/cc5UddX6.o: In function `cvGetRow': 
convert_cascade.c:(.text+0xca2): undefined reference to `cvGetRows' 
/tmp/cc5UddX6.o: In function `cvGetCol': 
convert_cascade.c:(.text+0xccd): undefined reference to `cvGetCols' 
/tmp/cc5UddX6.o: In function `cvReleaseMatND': 
convert_cascade.c:(.text+0xce0): undefined reference to `cvReleaseMat' 
/tmp/cc5UddX6.o: In function `cvSubS': 
convert_cascade.c:(.text+0xe00): undefined reference to `cvAddS' 
/tmp/cc5UddX6.o: In function `cvCloneSeq': 
convert_cascade.c:(.text+0xe4e): undefined reference to `cvSeqSlice' 
/tmp/cc5UddX6.o: In function `cvSetNew': 
convert_cascade.c:(.text+0xead): undefined reference to `cvSetAdd' 
/tmp/cc5UddX6.o: In function `cvGetSetElem': 
convert_cascade.c:(.text+0xf40): undefined reference to `cvGetSeqElem' 
/tmp/cc5UddX6.o: In function `cvEllipseBox': 
convert_cascade.c:(.text+0x1040): undefined reference to `cvEllipse' 
/tmp/cc5UddX6.o: In function `cvFont': 
convert_cascade.c:(.text+0x1090): undefined reference to `cvInitFont' 
/tmp/cc5UddX6.o: In function `cvReadIntByName': 
convert_cascade.c:(.text+0x111e): undefined reference to `cvGetFileNodeByName' 
/tmp/cc5UddX6.o: In function `cvReadRealByName': 
convert_cascade.c:(.text+0x11af): undefined reference to `cvGetFileNodeByName' 
/tmp/cc5UddX6.o: In function `cvReadStringByName': 
convert_cascade.c:(.text+0x1209): undefined reference to `cvGetFileNodeByName' 
/tmp/cc5UddX6.o: In function `cvReadByName': 
convert_cascade.c:(.text+0x1239): undefined reference to `cvGetFileNodeByName' 
convert_cascade.c:(.text+0x124f): undefined reference to `cvRead' 
/tmp/cc5UddX6.o: In function `main': 
convert_cascade.c:(.text+0x13b6): undefined reference to `cvLoadHaarClassifierCascade' 
convert_cascade.c:(.text+0x1495): undefined reference to `cvSave' 
collect2: ld returned 1 exit status 

似乎所有丟失的功能areare在core_c.h原型舊的C風格的OpenCV函數。但包括(#include <opencv2/core/core_c.h>)沒有區別。我也嘗試使用-lopencv_legacy標誌進行編譯(基本上只是猜測它可能與舊函數有關),但無濟於事。

我應該怎麼做才能編譯它?

回答

0

沒關係。事實證明,爲了啓用TBB,我必須重新編譯OpenCV,所以我只是給了CMAKE BUILD_EXAMPLES = ON命令,現在我已經編譯了它。我很確定這不是合適的解決方案;-)

1

/samples/c /目錄中應該有一個build_all.sh腳本,它將爲您構建所有示例;不需要CMAKE調整。

+0

這在mac上適用於我。 bash腳本雖然看起來很通用。 – Goran 2013-10-08 02:03:44