1

我知道这已经被问过好几次了,但我仍然在为简单的 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 位机器上出现问题:加载共享库时出错,也无法解决。

下面是构建输出:
make all
构建文件:../ShowImage.cpp
调用:Cygwin C++ Compiler
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++ Linker
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)'

我错过了什么吗?任何帮助将不胜感激。

4

1 回答 1

0

万一有人因为其他原因偶然发现了这个问题,我遇到了 x86 Ubuntu 18.04 docker 容器上的 OpenCV 链接选项与 Ubuntu 16.04 Raspberry Pi 上的不同的问题,我通过用链接器标志替换链接器标志解决了这个-lopencv_imgcodecs问题-lopencv_highgui.

于 2018-10-20T18:06:46.233 回答