系统信息: 带有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
答案 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;专家设置:命令行模式