通过 Conan 安装的软件包时出现链接器错误

Linker Error with packages installed through Conan

提问人:RedBox 提问时间:10/22/2023 最后编辑:RedBox 更新时间:10/22/2023 访问量:41

问:

我试图让 OpenCV 与柯南一起工作,但它不起作用。

我使用的是 Windows 10。

默认柯南配置文件:

[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=20
compiler.runtime=dynamic
compiler.version=193
os=Windows

我的项目文件夹的内容:

conanfile.txt

[requires]
opencv/4.5.5

[generators]
CMakeDeps
CMakeToolchain

CMakeLists.txt

cmake_minimum_required(VERSION 3.22)

project(minimal LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

find_package(OpenCV REQUIRED VERSION 4.5.5)

add_executable(prog main.cpp)

target_link_libraries(prog PRIVATE
    ${OpenCV_LIBS}
)

target_include_directories(prog PRIVATE 
    ${OpenCV_INCLUDE_DIRS}
)

main.cpp

#include <opencv2/opencv.hpp>

int main()
{
    cv::Mat mat{};
    return 0;
}

我使用以下命令配置项目:

conan install . --output-folder=build --build=missing

cmake -B build --preset conan-default

然后,我尝试使用以下命令进行构建:

cmake --build --preset conan-release

但我收到此错误:

 main.cpp
main.obj : error LNK2019: unresolved external symbol "public: __cdecl cv::Mat::Mat(void)" (??0Mat@cv@@QEAA@XZ) referenced in function main [C:\Users\redbox\Desktop\projects\opencvexample\build\prog.vcxproj]
main.obj : error LNK2019: unresolved external symbol "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ) referenced in function main [C:\Users\redbox\Desktop\projects\opencvexample\build\prog.vcxproj]
C:\Users\redbox\Desktop\projects\opencvexample\build\Release\prog.exe : fatal error LNK1120: 2 unresolved externals [C:\Users\desktop\Desktop\projects\opencvexample\build\prog.vcxproj]

我还尝试通过柯南编译一个安装了QT的基本程序,但随后发生了类似的错误。奇怪的是,这个错误似乎不会发生在相当小的库上,比如 Zlib(Conan 示例中的基本 Zlib 示例工作正常)

我不知道这里出了什么问题。

C++ opencv cmake linker-errors 柯南

评论

1赞 drodri 10/22/2023
您正在与裸库链接,但这是不正确的。你需要和CMake目标链接,(目标的确切名称我不知道,找到柯南包就会显示出来。目标能够引入和链接传递依赖项,而裸库则不能。target_link_libraries(prog PRIVATE OpenCV::OpenCV)find_package()
0赞 SpacePotatoes 10/22/2023
CMakeDeps没有定义(配方可以修复,因为它应该模仿官方的 CMake 配置文件)。链接导入的目标,它们在 opencv 配方中是正确的:OpenCV_LIBStarget_link_libraries(prog PRIVATE opencv_core)
1赞 drodri 10/22/2023
对于询问有关项目、支持的问题,您可以更好地使用 Github issues 中的 github.com/conan-io/conan/issues
0赞 RedBox 10/22/2023
@drodri 您的评论对我有所帮助,因为 CMake 现在找到了 OpenCV,但现在出现了一系列其他问题......我会调查,并可能提出一个单独的问题
0赞 drodri 10/24/2023
更好的是,按照上面的建议将它们发布为 Github 问题,该格式更适合此类支持问题

答: 暂无答案