Ubuntu 24系统; CLion IDE。尝试使用 OpenCV 和 Libtorch 运行代码时,出现以下错误:
undefined reference to cv::putText(...)
undefined reference to cv::VideoCapture::VideoCapture(...)
undefined reference to cv::imshow(...)
有趣的是,完全依赖 OpenCV(并使用上述函数)的应用程序运行没有问题。专门使用 Libtorch 的应用程序运行也没有问题。这种情况发生在同一个项目中,代码(显然)和 CMake 列表是不同的。
纯 OpenCV 应用程序使用的 CMake 示例:
cmake_minimum_required(VERSION 3.28)
project(libtorch)
find_package (OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
set(CMAKE_CXX_STANDARD 17)
add_executable(libtorch main.cpp)
target_link_libraries(libtorch ${OpenCV_LIBS})
纯 Libtorch 应用程序可使用的 CMake 示例:
cmake_minimum_required(VERSION 3.28)
project(libtorch)
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
add_executable(libtorch main.cpp)
target_link_libraries(libtorch "${TORCH_LIBRARIES}")
set_property(TARGET libtorch PROPERTY CXX_STANDARD 17)
混合应用程序中出现错误的 CMake 示例:
cmake_minimum_required(VERSION 3.28)
project(libtorch)
find_package (OpenCV REQUIRED)
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
add_executable(libtorch main.cpp)
target_link_libraries(libtorch ${OpenCV_LIBS})
target_link_libraries(libtorch "${TORCH_LIBRARIES}")
set_property(TARGET libtorch PROPERTY CXX_STANDARD 17)
这发生在同一个项目中。在 CLion 中,标志是
-DCMAKE_PREFIX_PATH=/usr/include/libtorch/share/cmake/Torch/
您不能多次调用
target_link_libraries
。每次调用都会覆盖之前的配置。 target_link_libraries(libtorch ${OpenCV_LIBS})
将 OpenCV 设置为依赖项。 target_link_libraries(libtorch "${TORCH_LIBRARIES}")
覆盖 OpenCV 依赖项并将 LibTorch 设置为依赖项。您必须在一次调用中设置所有依赖项:
target_link_libraries(libtorch ${OpenCV_LIBS} "${TORCH_LIBRARIES}")