繁体   English   中英

在命令行中使用opencv编译c ++代码时,未定义对…的引用

[英]Undefined reference to… when compiling c++ code with opencv, from command line

首先,对我的英语不好对不起,然后,它看起来像是简单的问题,但我尽了一切努力解决了这个问题,但没有任何效果。 我已经安装了OpenCv3.2,并且已经正确安装了build-essential。

我在上面链接了我的包含和错误。

包括:

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

接缝产生错误的代码:

Mat image = Mat::zeros( 1080, 1920, CV_8UC3 );
imshow("Image",image);

编译字符串:

g++ -o FD-progetto-vista-telecamera -O3 -std=gnu++11 -Wall ../FD-super_tracker.cpp -L/usr/local/lib/ -I/usr/local/include/ -lopencv_dnn -lopencv_ml -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_photo -lopencv_imgcodecs -lopencv_video -lopencv_objdetect -lopencv_imgproc -lopencv_flann -lopencv_core -lmysqlclient -lboost_system -lboost_filesystem -lm -ldl -ltiff

编译错误:

/tmp/cc7wFBb0.o: In function `project(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Telecamera_coord*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, Telecamera_coord*> > >)':
FD-super_tracker.cpp:(.text+0xbdd): undefined reference to `cv::String::allocate(unsigned long)'
FD-super_tracker.cpp:(.text+0xbf9): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
FD-super_tracker.cpp:(.text+0xc01): undefined reference to `cv::String::deallocate()'
FD-super_tracker.cpp:(.text+0x1180): undefined reference to `cv::String::deallocate()'
collect2: error: ld returned 1 exit status

更新:

我也尝试了以下选项(如建议的那样):

g++ -o FD-progetto-vista-telecamera -O3 -std=gnu++11 -Wall ../FD-super_tracker.cpp -L/usr/local/lib/ -I/usr/local/include/ `pkg-config --libs opencv` -lmysqlclient -lboost_system -lboost_filesystem -lm -ldl -ltiff

结果如下:

/tmp/ccklBhL2.o: In function `project(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Telecamera_coord*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, Telecamera_coord*> > >)':
FD-super_tracker.cpp:(.text+0xbdd): undefined reference to `cv::String::allocate(unsigned long)'
FD-super_tracker.cpp:(.text+0xbf9): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
FD-super_tracker.cpp:(.text+0xc01): undefined reference to `cv::String::deallocate()'
FD-super_tracker.cpp:(.text+0x1180): undefined reference to `cv::String::deallocate()'

- - - - - - - - - - - 解决了 - - - - - - - - - - -

感谢大家的帮助,但由于我在设备上安装了多个版本的OpenCv,所以发生错误。 我卸载了所有opencv版本,然后从源代码重新安装了它。 我希望这对某人有帮助。

您需要以正确的顺序提供库。 在这里,您需要稍后(在opencv_core之前)推送提供cv::String库。

链接器的工作方式是:在每个-l之后使用所需的内容逐步组装输出,然后删除不需要的内容。 因此,如果以后的库需要以前的库,则它会失败,因为链接器不会在外部库上循环。

正如#BjoernUrban所说,正确的顺序由pkg-config --libs opencv

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM