2012-02-21 105 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