LibTorch与OpenCV库无法在同一份CMakeLists.txt文件中正常使用
LibTorch与OpenCV同时链接失败的解决方法
该问题90%以上的场景是LibTorch与OpenCV编译使用的C++ ABI版本不匹配导致的,可按以下步骤排查解决:
- 第一步:确认两者ABI版本一致
官方提供的LibTorch分为两个发行版本:Pre-cxx11 ABI和cxx11 ABI,需要和你本地OpenCV编译使用的ABI版本完全匹配。
查看OpenCV使用的ABI版本可执行命令:readelf -p .comment /path/to/your/libopencv_core.so
若输出中gcc版本≥5,系统默认使用cxx11 ABI,对应下载cxx11版本的LibTorch即可;若你使用的是旧版gcc编译的OpenCV,对应下载Pre-cxx11版本的LibTorch。 - 第二步:修改CMakeLists.txt配置,强制指定ABI版本
修正后的CMakeLists.txt参考如下:cmake_minimum_required(VERSION 3.1 FATAL_ERROR) project(Detect) # 统一C++标准,LibTorch 1.7+建议用C++17 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 按你的ABI版本选择开关:用cxx11 ABI设为1,pre-cxx11设为0 add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1) #set(Torch "/home/somnath/libtorch/share/cmake/Torch") find_package(Torch REQUIRED) find_package(OpenCV REQUIRED) message(STATUS "CVINCLUDE: ${OpenCV_INCLUDE_DIRS}") add_executable(Detect main.cpp) # 移除链接参数间的分号,直接空格分隔即可 target_link_libraries(Detect ${TORCH_LIBRARIES} ${OpenCV_LIBS}) - 第三步:版本仍不匹配时重新编译其中一个库
如果上述操作后仍有链接错误,直接用同一个编译器、同一个C++标准、同一个ABI设置,重新编译LibTorch或OpenCV任意一方,保证两者编译配置完全一致即可解决问题。
内容的提问来源于stack exchange,提问作者Pixolish
相关产品推荐
相关产品推荐

