我正在尝试使用 cmake 构建一个程序。由于几个原因,程序必须使用静态库而不是动态库构建,我需要使用 PyTorch,所以这就是我所做的:
- 下载并安装 PyTorch 静态库(我
libtorch.a
在正确的路径中找到,在/home/me/pytorch/torch/lib
) - 由
CMakeLists.txt
以下内容制成:
cmake_minimum_required(VERSION 3.5.1 FATAL_ERROR)
project(example-app LANGUAGES CXX)
find_package(Torch REQUIRED)
add_executable(example-app example-app.cpp argparse/argparse.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}" -static -fopenmp)
set_property(TARGET example-app PROPERTY CXX_STANDARD 14)
仅供参考,example-app.cpp
是具有主要功能的文件,并且argparse/
是一个目录,其中包含一些调用函数的源代码example-app.cpp
它一直工作到cmake -DCMAKE_PREFIX_PATH=/home/me/pytorch/torch ..
,但以下build
会引发一些错误,说它找不到对某些函数的引用,即以 . 开头的函数fbgemm::
。fbgemm
是(据我所知)用于实现 PyTorch 的某种 GEMM 库。
在我看来,在链接静态 PyTorch 库时,它的内部库之类的fbgemm
东西没有正确链接,但我不是专家cmake
,老实说也不完全确定。
我做错了什么,还是有解决这个问题的方法?任何帮助或朝着正确的方向推动将不胜感激。
附言
确切的错误没有发布,因为它太长了,但它主要由
undefined reference to ~
错误组成。如果查看错误消息可能对某些人有帮助,我很乐意编辑问题并发布。build
如果我从代码中删除需要库函数的部分而不从.#include <torch/torch.h>
example-app.cpp