OpenCV 2.3编译问题 - 未定义的反射 - Ubuntu 11.10

时间:2011-10-19 04:40:43

标签: c++ ubuntu opencv g++

系统信息: 带有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

4 个答案:

答案 0 :(得分:73)

我猜测

输出中至少有一些库
pkg-config opencv --libs

是归档库。将归档库置于需要它们的源之前是不正确的(在本例中为test_1.cpp):链接行matters上的源和库的顺序。

尝试

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

答案 1 :(得分:2)

我遇到了同样的问题,但我发现pkg-config opencv --cflags正在打印“-I / usr / include / opencv”而不是“-I / usr / include / opencv2”......也许是Ubuntu上的包bug?

答案 2 :(得分:0)

我正在使用cmake并遇到类似的问题。

cmake配置文件正在发生一些奇怪的事情。

对我来说,只需将OPENCV_FOUND设置为TRUE并将OpenCV_FOUND设置为TRUE即可解决问题。

此外,我必须将OpenCV_DIR设置为/ usr / local / share / OpenCV。

另见https://stackoverflow.com/questions/18402564/how-do-static-methods-work

答案 3 :(得分:0)

@EmployedRussian的答案也适合我。对于那些想知道如何在Eclipse中指定此命令的人,请使用此帖子 -

https://www.eclipse.org/forums/index.php?t=msg&goto=233377&

使用opencv;而不是添加gtk +; 不是将新标志添加到&#39;其他链接器标志&#39;,而是在$ {INPUT}之后的末尾添加新标志 - 项目 - &gt;右键单击 - &gt;属性 - &gt; C / C ++构建 - &gt;设置 - &gt; GCC C ++链接器 - &gt;专家设置:命令行模式