Libtorch 运行示例

 

写在前面

学习 torch 源码

doc;

libtorch-2.9;

#include <torch/torch.h>
#include <iostream>

int main() {
    // 创建张量
    torch::Tensor tensor = torch::rand({2, 3});
    std::cout << "随机张量:\n" << tensor << std::endl;

    // 基本运算
    torch::Tensor a = torch::ones({2, 2});
    torch::Tensor b = torch::eye(2);
    torch::Tensor c = a + b;
    std::cout << "加法结果:\n" << c << std::endl;

    // GPU 张量 (如果有 CUDA)
    if (torch::cuda::is_available()) {
        std::cout << "CUDA 可用" << std::endl;
        torch::Tensor gpu_tensor = tensor.to(torch::kCUDA);
        std::cout << "GPU 张量:\n" << gpu_tensor << std::endl;
    }

    return 0;
}

官方指定 cmake

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

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# LibTorch 路径 需要用绝对路径
set(LIBTORCH_PATH "/home/disk2/tar_zip_pkg/torch/libtorch/")

# 包含目录
include_directories(${LIBTORCH_PATH}/include)
include_directories(${LIBTORCH_PATH}/include/torch/csrc/api/include)

# 链接目录
link_directories(${LIBTORCH_PATH}/lib)

add_executable(example-app test.cc)

# 链接所有必要的库
target_link_libraries(example-app
    PRIVATE
    torch
    torch_cpu
    c10  ## 这个库不指定链接会报错
    # 如果需要 CUDA
    # torch_cuda
)

# 设置编译选项
target_compile_options(example-app PRIVATE
    -D_GLIBCXX_USE_CXX11_ABI=1
)

# 设置链接选项
target_link_options(example-app PRIVATE
    -Wl,--no-as-needed
)
$ cmake -Bbuild . -DCMAKE_PREFIX_PATH=/home/disk2/tar_zip_pkg/torch/libtorch/
$ cmake --build build -j
$ ./build/example-app
随机张量:
 0.5450  0.8421  0.8744
 0.1490  0.8660  0.7899
[ CPUFloatType{2,3} ]
加法结果:
 2  1
 1  2
[ CPUFloatType{2,2} ]
$ ldd build/example-app
	linux-vdso.so.1 (0x00007ffde2bcf000)
	libtorch.so => /home/disk2/tar_zip_pkg/torch/libtorch/lib/libtorch.so (0x00007fe0a42f1000)
	libtorch_cpu.so => /home/disk2/tar_zip_pkg/torch/libtorch/lib/libtorch_cpu.so (0x00007fe08e5b0000)
	libc10.so => /home/disk2/tar_zip_pkg/torch/libtorch/lib/libc10.so (0x00007fe08e48b000)
	libstdc++.so.6 => /opt/compiler/gcc-12/lib/libstdc++.so.6 (0x00007fe08e268000)
	libm.so.6 => /opt/compiler/gcc-12/lib/libm.so.6 (0x00007fe08e126000)
	libgcc_s.so.1 => /opt/compiler/gcc-12/lib/libgcc_s.so.1 (0x00007fe08e105000)
	libc.so.6 => /opt/compiler/gcc-12/lib/libc.so.6 (0x00007fe08df41000)
	librt.so.1 => /opt/compiler/gcc-12/lib/librt.so.1 (0x00007fe08df35000)
	libdl.so.2 => /opt/compiler/gcc-12/lib/libdl.so.2 (0x00007fe08df30000)
	libpthread.so.0 => /opt/compiler/gcc-12/lib/libpthread.so.0 (0x00007fe08df10000)
	libgomp-98b21ff3.so.1 => /home/disk2/tar_zip_pkg/torch/libtorch/lib/libgomp-98b21ff3.so.1 (0x00007fe08dec7000)
	/opt/compiler/gcc-12/lib64/ld-linux-x86-64.so.2 (0x00007fe0a42f6000)