You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake编译LibTorch项目头文件<torch/torch.h>找不到问题求助

问题原因
  • 核心是CMake依赖传递的可见性配置错误:你在load_data库的CMakeLists.txt中,将Torch依赖设为了PRIVATE链接。这种配置下,Torch的头文件路径只会在编译load_data自身的源文件(.cpp)时生效,不会传递给依赖load_data的其他目标,也不会暴露给load_data公开头文件的使用者。
  • 当你把#include <torch/torch.h>写在load_data的公开头文件中时,编译main.cpp需要预处理这个头文件,此时main目标没有Torch的头文件搜索路径,就会报找不到文件的错误。
  • 把include语句移到.cpp文件后,只有编译load_data自己的源文件时会用到Torch头文件,此时私有配置的路径生效,就不会报错。
解决方案

根据你的业务需求二选一即可:

方案一:头文件需要暴露Torch相关类型

如果你的load_data公开头文件需要用到Torch的类型(比如你注释掉的torch::Tensor rand_tensor()接口),直接修改load_data/CMakeLists.txt的链接配置,将Torch依赖改为PUBLIC:

# 修改前
# target_link_libraries(${LIB_NAME}
#     PRIVATE
#         ${TORCH_LIBRARIES}
# )

# 修改后
target_link_libraries(${LIB_NAME}
    PUBLIC
        ${TORCH_LIBRARIES}
)

该配置会将Torch的头文件路径、编译选项自动传递给所有链接load_data的目标,编译main.cpp时就可以找到Torch头文件。

方案二:头文件不需要暴露Torch相关类型

如果Torch只是load_data的内部实现依赖,不需要对外暴露,直接将#include <torch/torch.h>从公开头文件移到.cpp源文件中即可,不需要修改CMake配置,这种方式也更符合封装原则,不会对外传递不必要的依赖。

额外优化建议
  • 删除load_data/CMakeLists.txt中重复添加的${PROJECT_SOURCE_DIR}/src/load_data.cpp源文件配置,避免冗余。
  • 根目录已经执行过find_package(Torch REQUIRED),子目录不需要重复执行find操作,可删除冗余配置。
  • 不需要手动修改CMAKE_CXX_FLAGS添加${TORCH_CXX_FLAGS},链接Torch目标时相关编译选项会自动传递。

内容的提问来源于stack exchange,提问作者Green

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:51:03