I'm trying to build a program using cmake. For several reasons, the program must be built using static libraries rather than dynamic libraries, and I need to use PyTorch so this is what I've done:
- Downloaded and installed PyTorch static library (I've found
libtorch.a
in the proper path, in/home/me/pytorch/torch/lib
) - Made
CMakeLists.txt
with the following contents:
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
is the file with the main function, and argparse/
is a directory with some source code for functions called in example-app.cpp
It works until cmake -DCMAKE_PREFIX_PATH=/home/me/pytorch/torch ..
, but the following build
incurs some errors, saying it could not find the reference to some functions, namely functions starting with fbgemm::
. fbgemm
is (as long as I know) some sort of GEMM library used in implementing PyTorch.
It seems to me that while linking the static PyTorch library, its internal libraries like fbgemm
stuff have not been linked properly, but I'm not an expert on cmake
and honestly not entirely sure.
Am I doing something wrong, or is there a workaround for this problem? Any help or push in the right direction would be greatly appreciated.
P.S.
The exact error has not been posted because it is way too long, but it consists of mostly
undefined reference to ~
errors. If looking at the error message might be helpful for some people, I'd be happy to edit the question and post it.build
ing and running the file works fine if I remove the parts that require the library's functions from the code without commenting out#include <torch/torch.h>
fromexample-app.cpp
.