2012-07-18 71 views
2

我一直有麻煩嘗試使用G ++在Linux的OpenCV的示例代碼的一些示例編譯但之後,我跑我得到這個錯誤信息:不能編譯OpenCV的在linux

g++ `pkg-config --cflags --libs opencv` hello.cpp -o hello 

我得到這樣的輸出:

/tmp/ccjvVxLI.o: In function `main': 
hello.cpp:(.text+0x45): undefined reference to `cvLoadImage' 
hello.cpp:(.text+0x6b): undefined reference to `cvNamedWindow' 
hello.cpp:(.text+0x7c): undefined reference to `cvShowImage' 
hello.cpp:(.text+0x86): undefined reference to `cvWaitKey' 
hello.cpp:(.text+0x90): undefined reference to `cvDestroyWindow' 
collect2: ld returned 1 exit status 

我看了網上和檢查了我安裝的OpenCV和我得到正常的輸出:

pkg-config --cflags opencv 

爲:

-I/usr/local/include/opencv -I/usr/local/include 

但是,當我跑:

pkg-config --libs opencv 

我有一個奇怪的列表,看起來像這樣:

/usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so  /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so 

如果它幫助我在Ubuntu LTS安裝Opencv2.4.1 12.04在這個網站的幫助下:http://www.samontab.com/web/2012/06/installing-opencv-2-4-1-ubuntu-12-04-lts/

回答

5

試試這個:

g++ `pkg-config --cflags opencv` -o hello hello.cpp `pkg-config --libs opencv` 
+0

您可以像調用pkg-config --cflags --libs opencv一樣調用pkg-config。 – kay 2012-07-18 03:11:13

+0

謝謝!工作!哦,順便說一句好的博客帖子@samontab。 – UnderWulf 2012-07-18 06:01:02

2

按照GCC manual

它在你寫這個選項的命令中有所不同, 鏈接器按指定的順序搜索並處理庫和目標文件,其順序爲 。因此,'foo.o -lz bar.o'在 文件foo.o之後但在bar.o之前搜索庫'z'。如果bar.o引用'z'中的函數,那麼這些函數可能不會被加載。

所以pkg-config --libs opencv必須在文件名的末尾,否則gcc將無法解析符號。

g++ hello.cpp -o hello `pkg-config --cflags --libs opencv` 
+0

儘管這段代碼可能解決了這個問題,但爲了使這個答案對未來的讀者有價值,一些解釋的話將會有很長的路要走。 – Thom 2015-04-30 17:12:46

+0

謝謝@TheThom指出。我會確保在未來的答案中添加必要的解釋。 – jaiprakashgogi 2015-05-08 09:35:16