I’m trying to compile a .cu file using nvcc, but I have a linking error related to the lib c10.
My compilation command is :
<code>nvcc -o linear linear.cu --std=c++17
-I ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/include
-I ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/include/torch/csrc/api/include
-I ~/miniconda3/envs/dev/include/python3.10
-I /usr/local/cuda/include
-L /usr/lib
-L /usr/local/lib
-L /lib/x86_64-linux-gnu
-L /usr/local/cuda/lib64
-L ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/lib
-ltorch
-ltorch_cpu
-lc10
-lcudart
-lcuda
-lcudadevrt
</code>
<code>nvcc -o linear linear.cu --std=c++17
-I ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/include
-I ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/include/torch/csrc/api/include
-I ~/miniconda3/envs/dev/include/python3.10
-I /usr/local/cuda/include
-L /usr/lib
-L /usr/local/lib
-L /lib/x86_64-linux-gnu
-L /usr/local/cuda/lib64
-L ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/lib
-ltorch
-ltorch_cpu
-lc10
-lcudart
-lcuda
-lcudadevrt
</code>
nvcc -o linear linear.cu --std=c++17
-I ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/include
-I ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/include/torch/csrc/api/include
-I ~/miniconda3/envs/dev/include/python3.10
-I /usr/local/cuda/include
-L /usr/lib
-L /usr/local/lib
-L /lib/x86_64-linux-gnu
-L /usr/local/cuda/lib64
-L ~/miniconda3/envs/dev/lib/python3.10/site-packages/torch/lib
-ltorch
-ltorch_cpu
-lc10
-lcudart
-lcuda
-lcudadevrt
and the error i have is :
<code>/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::Device::validate()':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c106Device8validateEv[_ZN3c106Device8validateEv]+0x73): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c106Device8validateEv[_ZN3c106Device8validateEv]+0xee): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::intrusive_ptr_target::~intrusive_ptr_target()':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c1020intrusive_ptr_targetD2Ev[_ZN3c1020intrusive_ptr_targetD5Ev]+0x13b): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::fromIntArrayRefSlow(c10::ArrayRef<long>)':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE[_ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE]+0xb9): undefined reference to `c10::detail::torchCheckFail(char const*, char const*, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::isIntrusivePtr() const':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNK3c106IValue14isIntrusivePtrEv[_ZNK3c106IValue14isIntrusivePtrEv]+0x189): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::toComplexDouble() const':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNK3c106IValue15toComplexDoubleEv[_ZNK3c106IValue15toComplexDoubleEv]+0x8c): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::toSymInt() const &':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNKR3c106IValue8toSymIntEv[_ZNKR3c106IValue8toSymIntEv]+0xab): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
</code>
<code>/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::Device::validate()':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c106Device8validateEv[_ZN3c106Device8validateEv]+0x73): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c106Device8validateEv[_ZN3c106Device8validateEv]+0xee): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::intrusive_ptr_target::~intrusive_ptr_target()':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c1020intrusive_ptr_targetD2Ev[_ZN3c1020intrusive_ptr_targetD5Ev]+0x13b): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::fromIntArrayRefSlow(c10::ArrayRef<long>)':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE[_ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE]+0xb9): undefined reference to `c10::detail::torchCheckFail(char const*, char const*, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::isIntrusivePtr() const':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNK3c106IValue14isIntrusivePtrEv[_ZNK3c106IValue14isIntrusivePtrEv]+0x189): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::toComplexDouble() const':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNK3c106IValue15toComplexDoubleEv[_ZNK3c106IValue15toComplexDoubleEv]+0x8c): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::toSymInt() const &':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNKR3c106IValue8toSymIntEv[_ZNKR3c106IValue8toSymIntEv]+0xab): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
</code>
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::Device::validate()':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c106Device8validateEv[_ZN3c106Device8validateEv]+0x73): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c106Device8validateEv[_ZN3c106Device8validateEv]+0xee): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::intrusive_ptr_target::~intrusive_ptr_target()':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c1020intrusive_ptr_targetD2Ev[_ZN3c1020intrusive_ptr_targetD5Ev]+0x13b): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::fromIntArrayRefSlow(c10::ArrayRef<long>)':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE[_ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE]+0xb9): undefined reference to `c10::detail::torchCheckFail(char const*, char const*, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::isIntrusivePtr() const':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNK3c106IValue14isIntrusivePtrEv[_ZNK3c106IValue14isIntrusivePtrEv]+0x189): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::toComplexDouble() const':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNK3c106IValue15toComplexDoubleEv[_ZNK3c106IValue15toComplexDoubleEv]+0x8c): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/tmpxft_003d4ab0_00000000-12_linear.o: in function `c10::IValue::toSymInt() const &':
tmpxft_003d4ab0_00000000-7_linear.cudafe1.cpp:(.text._ZNKR3c106IValue8toSymIntEv[_ZNKR3c106IValue8toSymIntEv]+0xab): undefined reference to `c10::detail::torchInternalAssertFail(char const*, char const*, unsigned int, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
I tried linking other libraries and changing the order but It didn’t work.
my nvcc version :
<code>Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0
</code>
<code>Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0
</code>
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0
and torch version : 2.1.2
New contributor
Sherlock Holmes is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.