Я следую этому очень простому примеру c++/pytorch:
И я могу пройти этот пример без ошибок. Однако при создании файла example-app.cpp (или его редактировании в любой момент времени) с помощью neovim clang выдает ошибку 'torch/torch.h' file not found [clang: pp_file_not_found]
. Мой файл CMakeLists.txt выглядит так:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(example-app)
find_package(Torch REQUIRED)
include_directories(SYSTEM /home/username/Downloads/libtorch/)
set(CMAKE_PREFIX_PATH "/home/username/Downloads/libtorch/share/cmake/Torch")
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)
Это не большая проблема для меня с этим небольшим проектом. Но я буду работать над более крупным проектом с libtorch и хотел бы, чтобы clang распознавал ‹torch/torch.h›. Была пара похожих вопросов по Stackoverflow, но ответов не было.
Обновлять:
Я считаю, что это происходит потому, что clang не видит torch/torch.h
, поскольку он не является частью включаемых путей. Я напечатал пути включения для clang, и это не был список. Поэтому я попытался добавить пути включения libtorch в /usr/include/, но тогда у него возникли проблемы с просмотром других файлов заголовков, на которые ссылаются файлы заголовков, которые я добавил. Поэтому я добавил каталог libtorch/include/torch/csrc/api/include/torch/
в /usr/include
, чтобы он мог читать #include <torch/torch.h
. Но затем в этих файлах заголовков с указанными путями к каталогам за пределами пути libtorch/include/torch/csrc/api/include/torch/
указываются другие заголовочные файлы.
Например, libtorch/include/torch/csrc/
содержит WindowsTorchApiMacro.h
. В каталоге libtorch
есть и другие пути, содержащие дополнительные заголовочные файлы. Я попытался добавить все заголовочные файлы в \usr\include
, но все равно получил ошибку. Я уверен, что пакет в целом нужно использовать. Исходный файл cmake выглядит так:
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)
Таким образом, cmake может правильно найти и сослаться на все эти заголовочные файлы, и я знаю, что вы можете скомпилировать его в командной строке с помощью clang, но как clang в neovim (во время редактирования) может увидеть этот пакет без ошибок? Я думал об использовании менеджера пакетов, такого как vcpkg, но, к сожалению, у них нет libtorch. При необходимости я могу включить вывод подробного и успешного запуска cmake.
#inlcude <torch/torch.h>
в начало файла, последующие#include ,...
не будут правильно считаны и тоже станут ошибками. Могу сделать скриншот, если поможет. - person d84_n1nj4   schedule 08.12.2020cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
в мою сборку, чтобы сгенерировать файлcompile_commands.json
в каталоге сборки. Затем я просто переместил этот файл из каталога сборки в корень моего проекта, и это решило проблему. Спасибо! Не стесняйтесь добавлять это к ответу, и я дам награду. - person d84_n1nj4   schedule 08.12.2020libs
, в которой я сохраняю все сторонние библиотеки (такие как torch, sfml и так далее...) - person trialNerror   schedule 09.12.2020