未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
Undefined reference to... when compiling c++ code with opencv, from command line
首先对不起我的英语不好,然后,它看起来像一个简单的问题,但我尝试了一切来解决它,没有任何效果。我已经安装了 OpenCv3.2,并且我已经正确安装了构建基本版本。
我在上面链接了我的包含和错误。
包括:
#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
.
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- qt C++命令行代码中的分段错误(核心转储)
- 将命令行转换为从 Openssl 到 c++ 的代码
- 如何使用 gcc 通过命令行限制C++代码的内存使用量?
- 如何在 curl 代码C++设置授权持有者标头?我得到的授权不足,即使它在命令行上工作
- 是否有任何 MSBuild 命令行选项可以动态禁用 c++ 项目的代码分析?
- C++ - 代码在Visual Studio中完美运行,但命令行中的.exe不断崩溃
- C 能够以其完整路径打开代码::块中的文件,但不能以相对路径作为命令行参数打开文件
- 在C/C 中使用检查功能的Windows NT命令行代码循环
- 节点 js 我可以从用 C++ 编写的 windows 命令行应用程序中获取退出代码
- 如何使用命令行运行代码块项目
- 为什么我的代码两次打印相同的命令行参数
- OpenSSL-通过代码生成的数字签名与在命令行生成的签名不匹配
- 代码::封锁前构建选项与命令行(QT)不一致
- 将代码从一个命令行参数更新为两个
- 在 c++ 中处理代码的命令行参数,用于随机输入和用户输入
- C++:模式:哪种模式适合特定的代码执行,具体取决于命令行参数
- 处理命令行参数解析/验证的代码段/lib
- 可以从命令行运行C++代码,但不能从visual studio中的调试模式运行