我正在尝试使用cmake构建程序。由于多种原因,该程序必须使用静态库而不是动态库来构建,而我需要使用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)
FYI,example-app.cpp
是具有主要功能的文件,argparse/
是具有一些在example-app.cpp
中调用的功能的源代码的目录>
[直到cmake -DCMAKE_PREFIX_PATH=/home/me/pytorch/torch ..
才有效,但随后的build
会产生一些错误,表示找不到对某些功能的引用,即以fbgemm::
开头的功能。 fbgemm
(据我所知)是用于实现PyTorch的某种GEMM库。
在我看来,在链接静态PyTorch库时,它的内部库如fbgemm
的东西未正确链接,但我不是cmake
的专家,老实说也不完全确定。
我是在做错什么,还是有解决此问题的方法?任何帮助或朝正确方向的推动将不胜感激。
P.S。
确切的错误尚未发布,因为它太长了,但主要由undefined reference to ~
错误组成。如果查看错误消息可能对某些人有帮助,我很乐意编辑问题并将其发布。
[build
并运行文件可以正常工作,如果我从代码without
#include <torch/torch.h>
中注释了example-app.cpp
。我正在尝试使用cmake构建程序。由于多种原因,该程序必须使用静态库而不是动态库来构建,而我需要使用PyTorch,所以这就是我要做的事情:...
最近通过PyTorch的静态链接经历了类似的过程,说实话这还不太好。