Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pytorch张量::数据;朗朗>;()不在Linux上工作_Pytorch_Linker Errors_Libtorch - Fatal编程技术网

Pytorch张量::数据;朗朗>;()不在Linux上工作

Pytorch张量::数据;朗朗>;()不在Linux上工作,pytorch,linker-errors,libtorch,Pytorch,Linker Errors,Libtorch,我无法在Linux下将我的程序链接到pytorch,出现以下错误: /tmp/ccbgkLx2.o: In function `long long* at::Tensor::data<long long>() const': test.cpp:(.text._ZNK2at6Tensor4dataIxEEPT_v[_ZNK2at6Tensor4dataIxEEPT_v]+0x14): undefined reference to `long long* at::Tensor::data

我无法在Linux下将我的程序链接到pytorch,出现以下错误:

/tmp/ccbgkLx2.o: In function `long long* at::Tensor::data<long long>() const':
test.cpp:(.text._ZNK2at6Tensor4dataIxEEPT_v[_ZNK2at6Tensor4dataIxEEPT_v]+0x14): undefined reference to `long long* at::Tensor::data_ptr<long long>() const'
Pytorch已从链接下载并解压缩(因此我将libtorch文件夹放在test.cpp文件夹旁边)

有没有办法解决这个问题?在Visual C++环境下,程序运行良好。 另外,我知道pytorch是为cmake设计的,但我对cmake没有任何经验,也不想为我的应用程序编写基于cmake的构建系统。此外,他们给出的示例似乎只在系统中“安装”了pytorch的情况下才有效。所以我不能直接用libs下载.zip?如果我在AVX512系统上“安装”它(例如,从源代码或以任何其他方式),我链接到它并分发给最终用户的二进制文件会在非AVX512上工作吗?这些文档对于新手来说是完全不可理解的

更新:我试图通过CMake在教程之后完成此操作,但得到了完全相同的错误。具体来说,我将目录重命名为example-app,将源文件重命名为example-app.cpp。然后,我在这个目录中创建了CMakeLists.txt,包含以下内容:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(example-app)

find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")

add_executable(example-app example-app.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}")
set_property(TARGET example-app PROPERTY CXX_STANDARD 14)
然后

以下是输出:

CMakeFiles/example-app.dir/example-app.cpp.o: In function `long long* at::Tensor::data<long long>() const':
example-app.cpp:(.text._ZNK2at6Tensor4dataIxEEPT_v[_ZNK2at6Tensor4dataIxEEPT_v]+0x14): undefined reference to `long long* at::Tensor::data_ptr<long long>() const'
cmakfiles/example app.dir/example app.cpp.o:在函数'long long*at::Tensor::data()const'中:
示例app.cpp:(.text._ZNK2at6Tensor4dataIxEEPT_v[_ZNK2at6Tensor4dataIxEEPT_v]+0x14):未定义对“long long*at::Tensor::data_ptr()const”的引用
让我想,也许我忘了包含一些标题或定义一些变量?
哦,这些都是在Mint19.2(相当于Ubuntu18.04)上实现的,g++版本是7.5.0,glibc版本是2.27。使用g++-8编译会得到相同的结果。

这不是与cmake相关的错误,而是库的实现方式。我不知道为什么,但似乎忘记了/省略了
T*at::Tensor::data const
T=long
的专门化

如果要获取签名的64位指针,仍然可以使用
int64\t
获取:

auto data = T.data<int64_t>();
auto data=T.data();
为了避免兼容性问题,最好使用这些大小通常是显式的类型

mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=../../libtorch ..
cmake --build . --config Release
CMakeFiles/example-app.dir/example-app.cpp.o: In function `long long* at::Tensor::data<long long>() const':
example-app.cpp:(.text._ZNK2at6Tensor4dataIxEEPT_v[_ZNK2at6Tensor4dataIxEEPT_v]+0x14): undefined reference to `long long* at::Tensor::data_ptr<long long>() const'
auto data = T.data<int64_t>();