當前位置: 首頁>>技術教程>>正文


OpenCV 2.3編譯問題 – 未定義的反射 – Ubuntu 11.10

, , ,

問題描述

係統信息:帶OpenCV 2.3的Ubuntu 11.10(64位)(今天安裝)

我正在嘗試在OpenCV 2.3中編譯一些非常簡單的代碼,但我得到一個奇怪的錯誤。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(){
  cv::Mat image=cv::imread("img.jpg");
  cv::namedWindow("My Image");
  cv::imshow("My Image",image);
  cv::waitKey(0);
  return 1;
}

但是,我收到這些錯誤消息……

-SG41:~/Desktop$ g++ `pkg-config opencv --cflags --libs` -o test_1 test_1.cpp 
/tmp/ccCvS1ys.o: In function `main':
test_1.cpp:(.text+0x44): undefined reference to `cv::imread(std::basic_string<char,    std::char_traits<char>, std::allocator<char> > const&, int)'
test_1.cpp:(.text+0x8e): undefined reference to `cv::namedWindow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
test_1.cpp:(.text+0xbc): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
test_1.cpp:(.text+0xf0): undefined reference to `cv::imshow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
test_1.cpp:(.text+0x112): undefined reference to `cv::waitKey(int)'
/tmp/ccCvS1ys.o: In function `cv::Mat::~Mat()':
test_1.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
/tmp/ccCvS1ys.o: In function `cv::Mat::release()':
test_1.cpp:(.text._ZN2cv3Mat7releaseEv[cv::Mat::release()]+0x47): undefined reference to `cv::Mat::deallocate()'
collect2: ld returned 1 exit status

最佳解決思路

我猜測至少有一些庫的輸出

pkg-config opencv --libs

是歸檔庫。將歸檔庫放在需要它們的源之前是不正確的(在本例中為test_1.cpp):鏈接行matters上的源和庫的順序。

嘗試

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

次佳解決思路

我遇到了同樣的問題,但我發現pkg-config opencv –cflags正在打印”-I/usr/include/opencv”而不是”-I/usr/include/opencv2″ …也許是Ubuntu的包錯誤?

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/6981.html,未經允許,請勿轉載。