I am writing a simple c++ code to generate random torch::Tensor
. Later, I will compile the library to .so and load it into my python code using torch.ops.load_library(<path>.so)
I compile libtorch (cxx ABI) 2.1.2 from source and PyTorch 2.1.2 from pip from the link. Both use CUDA 12.1.
I have a op.cpp
which defines my C++ operator, a CMakeLists.txt file to build a .so.
Finally, I load the .so in my test.py
file
- CMakeLists.txt
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
project(warp_perspective)
SET(CMAKE_PREFIX_PATH /home/saandeepaath-admin/projects/learning/cpp_cmake/example2/libtorch)
find_package(Torch REQUIRED)
# Define our library target
add_library(warp_perspective SHARED op.cpp)
# Enable C++14
target_compile_features(warp_perspective PRIVATE cxx_std_14)
# Link against LibTorch
target_link_libraries(warp_perspective "${TORCH_LIBRARIES}")
- op.cpp
#include <torch/torch.h>
#include <iostream>
torch::Tensor create_rand(){
torch::Tensor ten = torch::rand({5});
std::cout<<"TENSOR: "<<ten<<std::endl;
return ten;
}
TORCH_LIBRARY(op_cpp, m) {
m.def("create_rand", create_rand);
}
- test.py
import sys
import torch
# import torch.utils
print(torch.utils.cmake_prefix_path)
print(torch._C._GLIBCXX_USE_CXX11_ABI)
torch.ops.load_library("build/libwarp_perspective.so")
print(torch.ops.op_cpp.create_rand())
Output of running cmake
However, when I try to load my .so file into my test.py file, I get the following error
OSError: <path>/libwarp_perspective.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Please advise.