【问题标题】:Undefined reference to cv::imread对 cv::imread 的未定义引用
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2014-10-18
    • 2016-04-02
    • 2022-01-25
    • 2014-06-24
    相关资源
    最近更新 更多