[英]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.