编译libtorch示例代码时遇到依赖libomp.dylib的问题

目的

本文目的是记录在C++中使用libtorch编译代码的过程中所遇到的问题。

环境信息如下表所示:

项目 详细
芯片 Apple M1 Pro
MacOS Sonoma 14.2
IDE Visual Studio Code v1.85.1
CMake v3.22.2
libtorch v2.3.0

代码

代码目录结构:

test.cpp内容:

#include <torch/torch.h>
#include <iostream>

int main()
{
    torch::Tensor tensor = torch::eye(3);
    std::cout << tensor << std::endl;
}

CMakeLists.txt内容:

cmake_minimum_required(VERSION 3.0)

project(libtorch_test)

set(CMAKE_CXX_STANDARD 17)

set(SOURCE_DIR src)

add_executable(libtorch_test ${SOURCE_DIR}/test.cpp)

# libtorch
set(Torch_DIR ${PROJECT_SOURCE_DIR}/third_party/libtorch/share/cmake/Torch)
find_package(Torch REQUIRED)
message(STATUS "Torch version: ${Torch_VERSION}")

# link libtorch
target_link_libraries(libtorch_test ${TORCH_LIBRARIES})

编译脚本:

cd build
cmake ..
make

执行:

./libtorch_test

问题

执行阶段报错信息如下所示:

从信息中可知,问题原因是在库文件搜索路径中无法找到libomp.dylib,从而导致执行失败。

解决方法

第一步:使用homebrew安装libomp。安装完成后,libomp位于/opt/homebrew/opt/libomp路径下。

第二步:在/usr/local/bin路径下,建立指向/opt/homebrew/opt/libomp/lib/libomp.dylib的符号链接。

扩展思考

本人最初的思路是想在CMakeLists.txt中增加库文件的搜索路径,但是没有成功。如果有人知道如何指定库文件的搜索路径,请留言赐教。谢谢!