【发布时间】:2015-09-25 00:21:50
【问题描述】:
我知道这已经被问过好几次了,但我仍然在为简单的 opencv 代码的链接器错误未定义引用而苦苦挣扎。这是我的代码:
#include <opencv2/highgui.hpp>
using namespace cv;
int main(int argc, char** argv) {
Mat inputImage = imread(argv[1]);
imshow("Input Image", inputImage);
waitKey(0);
}
我正在使用 eclipse IDE、cygwin g++ 编译器和 opencv 3.0。 我已正确给出包含路径、库搜索路径为“C:\opencv\build\x64\vc11\lib”和“C:\opencv\build\x64\vc11\staticlib”和库:opencv_highgui300、opencv_highgui300d、opencv_core300、opencv_core300d ,opencv_imgcodecs300,opencv_imgcodecs300d 我认为这些对于这个简单的代码来说已经足够了,从 opencv 文档中可以清楚地看出。但是如上所述,imread、imshow、waitkey 仍然出现链接器错误。 我尝试使用 pkg-config,但 pkg-config 在我的 64 位机器上出现问题:加载共享库时出错,也无法解决。
以下是构建输出:
全部制作
构建文件:../ShowImage.cpp
调用:Cygwin C++ 编译器
g++ -I"C:\opencv\build\include\opencv" -I"C:\opencv\build\include" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"ShowImage. d" -MT"ShowImage.d" -o "ShowImage.o" "../ShowImage.cpp"
完成构建:../ShowImage.cpp
构建目标:Test.exe
调用:Cygwin C++ 链接器
g++ -L"C:\opencv\build\x64\vc11\lib" -L"C:\opencv\build\x64\vc11\staticlib" -o "Test.exe" ./ShowImage.o -lopencv_highgui300 -lopencv_highgui300d - lopencv_core300 -lopencv_core300d -lopencv_imgcodecs300 -lopencv_imgcodecs300d
./ShowImage.o:在函数 main':*
*/cygdrive/d/Gateway_Firmware/ImProcessing_WS/Test/Debug/../ShowImage.cpp:12: undefined reference tocv::imread(cv::String const&, int)'
/cygdrive/d/Gateway_Firmware/ImProcessing_WS/Test/Debug/../ShowImage.cpp:12:(.text+0x44):重定位截断以适应:R_X86_64_PC32 针对未定义符号`cv::imread(cv::String const&, int)'
我错过了什么吗?任何帮助将不胜感激。
【问题讨论】:
-
发布 1. 链接器错误 2. 编译器和链接器命令行
-
“我错过了什么吗” - 是的。您根本无法将 prebuild vs libs 与 mingw 一起使用。尽管您正确地尝试添加 opencv_imgcodecs300.lib - 它是为不同的编译器制作的。现在你必须获得 cmake,并从 src 构建 opencv 库。
-
@berak 感谢您对问题的洞察力。现在我可以使用 Visual Studio 编译和运行应用程序。还知道我应该只添加任一类型的库(例如 opencv_highgui300d 或 opencv_highgui300),具体取决于调试或发布配置,但不能同时添加,因为 imread 总是返回任何输入图像都为 null。
标签: opencv linker-errors undefined-reference pkg-config imread