用cmake构建基于qt5,opencv,libtorch项目

本文探讨了在QtCreator中使用CMake构建Qt、OpenCV和LibTorch项目的最佳实践,解决了使用qmake时遇到的内存段错误问题。通过详细配置CMakeLists.txt,确保了PyTorch v1.0.1的顺利集成,提供了实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意

Qt:5.10.1
libtorch:pytorch v1.0.1
gcc:5.4.0
在qtcreator中利用qmake使用v1.0.1正式版的libtorch,编译正常,但是module使用forword函数

c10::intrusive_ptr<c10::ivalue::Tuple> results = module->forward(inputs).toTuple();//.toTensor();

时会报segment error,即内存段错误,但是使用cmake编译正常情况下却可以运行。所以使用最新的第三方库的时候还是推荐使用Cmake,即使是用Qt,qmake有时还是会出现错误,但是毕竟Qt就支持Cmake,所以干脆直接使用cmake来得省心。

用cmake构建基于qt5,opencv,libtorch项目

基础教程,请参考用cmake构建基于qt5.8.0的qt5项目,再给个常见错误解决链接
再给出我的Cmakelist.txt的源码:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(maskrcnn_benchmark_cppdemo)

#Set library path
set(OpenCV_DIR /home/shining/ProgramFiles/miniconda/envs/pytorch1.0//share/OpenCV)
set(CMAKE_PREFIX_PATH /home/shining/ProgramFiles/Qt5.10.1/5.10.1/gcc_64/lib/cmake/Qt5)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#set(RESOURCE_DIR resources/resources.qrc)
find_package(Qt5 REQUIRED Widgets Core Gui)
qt5_wrap_cpp( MOC mainwindow.h)
qt5_wrap_ui( UIC mainwindow.ui)
qt5_add_resources(RCC resources.qrc)
qt5_generate_moc(main.cpp main.moc)

set_target_properties(Qt5::Core Qt5::Gui PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")

file(GLOB_RECURSE CURRENT_HEADERS include/*.h  libosa/inc/*.h libosa/inc/csl/*.h *.h )
file(GLOB CURRENT_SOURCES *.cpp  utils/*.cpp libosa/src/osa/*.c)

include_directories(BEFORE libosa/inc libosa/inc/csl )

set(CMAKE_PREFIX_PATH /home/shining/ProgramFiles/miniconda/envs/pytorch1.0/lib/python3.6/site-packages/torch)
find_package(Torch REQUIRED NO_CMAKE_FIND_ROOT_PATH)
find_package (OpenCV REQUIRED NO_CMAKE_FIND_ROOT_PATH)

# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

message(STATUS "Caffe2 library status:")
message(STATUS "    version: ${CAFFE2_VERSION}")
message(STATUS "    libraries: ${Caffe2_MAIN_LIBS}")
message(STATUS "    include path: ${CAFFE2_INCLUDE_DIRS}")


message(STATUS "Torch library status:")
message(STATUS "    version: ${TORCH_VERSION}")
message(STATUS "    libraries: ${TORCH_LIBRARIES}")
message(STATUS "    include path: ${TORCH_INCLUDE_DIRS}")

include_directories(  ${OpenCV_INCLUDE_DIRS}  ${TORCH_INCLUDE_DIRS} include)

add_executable(traced_model_demo ${MOC} ${UIC} ${CURRENT_HEADERS} ${CURRENT_SOURCES} mainwindow.ui)

target_compile_features(traced_model_demo PUBLIC cxx_range_for)

target_link_libraries(traced_model_demo "${TORCH_LIBRARIES}"  Qt5::Widgets Qt5::Core Qt5::Gui)

target_link_libraries(traced_model_demo "opencv_core" "opencv_highgui" "opencv_imgcodecs" "opencv_imgproc" "dl")
#注册jit custom ops
target_link_libraries(traced_model_demo -Wl,--no-as-needed /home/shining/Projects/work/maskrcnn-xray/maskrcnn_benchmark/csrc/custom_ops/cmake-build-release/libmaskrcnn_benchmark_customops.so)

这里面需要特别注意的是使用QT Gui的时候,

#设置Qt5的CmakeConfig路径
set(CMAKE_PREFIX_PATH /home/shining/ProgramFiles/Qt5.10.1/5.10.1/gcc_64/lib/cmake/Qt5)

#设置使能 moc ,uic,rcc
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#set(RESOURCE_DIR resources/resources.qrc)
# 查找Qt5
find_package(Qt5 REQUIRED Widgets Core Gui)
qt5_wrap_cpp( MOC mainwindow.h)
qt5_wrap_ui( UIC mainwindow.ui)
qt5_add_resources(RCC resources.qrc)
qt5_generate_moc(main.cpp main.moc)
.
.
.
#非常重要,不然会出现错误。。。
add_executable(traced_model_demo ${MOC} ${UIC} ${CURRENT_HEADERS} ${CURRENT_SOURCES} mainwindow.ui)

``
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值