当前位置: 首页>>技术教程>>正文


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/article/6981.html,未经允许,请勿转载。