【pytorch】libtorch的CMake问题

(1)单一文件

即将源文件和CMakeLists.txt放在同一文件夹下,那么:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(test1)

set(Torch_DIR "/your/path/libtorch/share/cmake/Torch")
find_package(Torch REQUIRED)

add_executable(test1 test1.cpp)
target_link_libraries(test1 "${TORCH_LIBRARIES}")
set_property(TARGET test1 PROPERTY CXX_STANDARD 14)

此处使用的是Pre-cxx11 ABI

(2)分文件编写项目

文件结构如下:

.
├── CMakeLists.txt
├── include
│   └── test.h
├── src
│   └── test.cpp
└── test_m.cpp

编写CMakeList.txt

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(test1)

set(Torch_DIR "/your/path/libtorch/share/cmake/Torch")
find_package(Torch REQUIRED)
find_package(OpenCV REQUIRED)

include_directories(
    ${PROJECT_SOURCE_DIR}
    ${PROJECT_SOURCE_DIR}/include
)
add_library(${PROJECT_NAME} SHARED
    src/test.cpp
    include/test.h
)
add_executable(test_m test_m.cpp)
target_link_libraries(test_m 
                    ${PROJECT_NAME} 
                    ${TORCH_LIBRARIES}
)
set_property(TARGET test_m PROPERTY CXX_STANDARD 14)

报错:

 fatal error: torch/torch.h: 没有那个文件或目录 #include <torch/torch.h>

修改:

include_directories(
    ${PROJECT_SOURCE_DIR}
    ${PROJECT_SOURCE_DIR}/include
    ${TORCH_INCLUDE_DIRS}
)

报错:

CMakeFiles/test_m.dir/test_m.cpp.o:在函数‘c10::IValue::isIntrusivePtr() const’中:
test_m.cpp:(.text._ZNK3c106IValue14isIntrusivePtrEv[_ZNK3c106IValue14isIntrusivePtrEv]+0x17b):对‘c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::string const&)’未定义的引用
CMakeFiles/test_m.dir/test_m.cpp.o:在函数‘c10::IValue::toComplexDouble() const’中:
test_m.cpp:(.text._ZNK3c106IValue15toComplexDoubleEv[_ZNK3c106IValue15toComplexDoubleEv]+0x88):对‘c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::string const&)’未定义的引用
collect2: error: ld returned 1 exit status
CMakeFiles/test_m.dir/build.make:101: recipe for target 'test_m' failed
make[2]: *** [test_m] Error 1
CMakeFiles/Makefile2:110: recipe for target 'CMakeFiles/test_m.dir/all' failed
make[1]: *** [CMakeFiles/test_m.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

这个原因不知道为什么,猜想是因为使用的包是Pre-cxx11 ABI,因为更换为cxx11 ABI包,便可以正常编译执行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,CMake是一个跨平台的构建系统,用于管理软件项目的构建过程。它可以根据不同的平台和构建需求生成所需的构建文件,使开发人员能够跨多种环境和操作系统构建项目。 libtorchPyTorch的C++库,它使开发人员能够在没有Python环境的情况下使用PyTorch的功能。libtorch提供了一组丰富的C++接口,方便开发人员在C++项目中使用神经网络模型。 Yolov5是一个目标检测算法,它是基于深度学习的物体检测和识别算法。它通过将图像分成网格并在每个网格上预测边界框和类别,实现对图像中物体的定位和分类。 要将以上三者结合使用,首先需要在项目中集成libtorch。可以在官方网站上下载适用于特定平台和操作系统的libtorch库。然后,在项目的CMakeLists.txt文件中添加必要的CMake配置,以确保libtorch正确链接到项目中。 接下来,需要将Yolov5算法集成到项目中。可以在GitHub上找到Yolov5的源代码,并将其复制到项目目录中。然后,在项目中添加适当的C++源代码文件和头文件来实现Yolov5算法的功能。确保在代码中引入libtorch的头文件,并使用相应的接口来加载和使用训练好的Yolov5模型。 最后,使用CMake来构建项目。打开一个终端窗口,进入项目目录,并运行以下命令来生成构建文件: ``` mkdir build cd build cmake .. ``` 然后,使用以下命令来编译项目: ``` cmake --build . ``` 编译成功后,会在build文件夹中生成可执行文件。可以运行该文件来使用Yolov5算法进行目标检测。 综上所述,要将CMakelibtorch和Yolov5结合使用,首先需要集成libtorch到项目中,然后将Yolov5算法代码添加到项目中,并使用CMake来构建项目。这样就可以在不使用Python环境的情况下使用Yolov5目标检测算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值