为啥在这种情况下编译器会抛出“未定义的引用...”错误?

Posted

技术标签:

【中文标题】为啥在这种情况下编译器会抛出“未定义的引用...”错误?【英文标题】:Why does the compiler throw "undefined reference to..." error in this case?为什么在这种情况下编译器会抛出“未定义的引用...”错误? 【发布时间】:2020-05-26 00:58:38 【问题描述】:

我正在尝试在 CLion 中运行在 Visual Studio 中完美运行的代码。该程序具有外部依赖项 - OpenCV 4.2.0 库。我以前从未使用过 CMake,因此我搜索了有关如何将库链接到项目的解决方案。我使用 MingW-w64 作为我的环境。 CMake 构建时没有任何警告,但是在编译项目时会抛出错误“未定义的引用(将 OpenCV 中的任何函数放在这里)。我花了 5 个小时试图了解出了什么问题,在论坛上寻找解决方案,当然,在这里, 但我没有找到问题的根源。我创建了另一个项目只是为了简化调试。这两个项目都使用相同的 CMakeLists.txt 文件引发相同的错误。 这是我的 CMakeList.txt:

project(SOMETHINF)

set(CMAKE_CXX_STANDARD 20)
set(OpenCV_DIR "E:\\LIBS\\opencv\\build\\x64\\vc15\\lib")
find_package( OpenCV REQUIRED )

include_directories($OpenCV_INCLUDE_DIRS)
message($OpenCV_LIBS)
add_executable(SOMETHINF main.cpp)
target_link_libraries(SOMETHINF $OpenCV_LIBS)

如您所见,我将 message() 放在那里,看看它是否找到了文件:

opencv_calib3dopencv_coreopencv_dnnopencv_features2dopencv_flannopencv_gapiopencv_highguiopencv_imgcodecsopencv_imgprocopencv_mlopencv_objdetectopencv_photoopencv_stitchingopencv_videoopencv_videoioopencv_world
-- Configuring done
-- Generating done
-- Build files have been written to: E:/SOMETHINF/cmake-build-debug

[Finished]

这是代码(还有其他不必要的东西只是因为):

我试图编译它:

以前有没有人遇到过类似的情况?

【问题讨论】:

Stack Overflow 不鼓励对代码、日志和其他文本信息使用屏幕截图。请不要粘贴您的两个日志,而是粘贴 text。另见How to Ask。 【参考方案1】:

看起来您正在使用 msvc 库,但如果您使用 MinGW 编译器,它将无法工作。 您可以阅读此link 以了解原因。

提供正确的库应该可以解决您的问题!通常项目的所有者提供 msvc 12/14/15/16 和 mingw 二进制文件。如果你没有它们,我通过快速搜索找到了this unofficial build。

【讨论】:

非常感谢!我知道问题不在于代码,而在于一些技术细节。我将确保获得适合我选择的环境的正确版本的库,您会得到您的支持和接受的答案,我非常感谢您的帮助:)

以上是关于为啥在这种情况下编译器会抛出“未定义的引用...”错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 JSON.parse 会抛出跨域错误?

为啥编译器会抛出“预期类型说明符”?

为啥我的 Tomcat 服务器在编译 JSP 时会抛出间歇性 404?

为啥 `"foo".bar = 42;` 在 ES6 的严格模式下会抛出 `TypeError`?

急!LINUX下,GCC编译,原程序包含<semaphore.h>头文件,为啥编译时说sem_wait,sem_post等未定义的引用

为啥 Dash 在通过 PyCharm 调试时会抛出 TypeError? [关闭]