Я пытаюсь настроить свой проект на C ++ с использованием файлов HDF5 и pyTorch (C ++ API), и есть некоторые проблемы с линковкой.
Итак ... Я запускаю Ubuntu 18.04 LTS.Я установил HDF5 с APT, затем я загружаю zip из pyTorch и помещаю его в каталог Third_party в структуре моего проекта.
project/
--data/
----data.h5
--third_party/
----libtorch/
--main.cpp
--CMakeLists.txt
--run.sh
Мой main.cpp выглядит так:
#include <iostream>
#include <torch/torch.h>
#include "H5Cpp.h"
#define PRINT(x) std::cout<<x<<std::endl;
const H5std_string FILE_NAME("real/path/to/project/data/data.h5");
int main() {
// Create a vector of inputs.
std::vector<torch::jit::IValue> inputs;
inputs.push_back(torch::ones({1, 3, 3, 3}));
H5::H5File file(FILE_NAME, H5F_ACC_RDONLY);
}
ЗатемCMakeLists:
project(cpptorch)
set(CMAKE_CXX_STANDARD 14)
# pyTorch
find_package(Torch REQUIRED)
# HDF5
find_package(HDF5 REQUIRED COMPONENTS C CXX HL REQUIRED)
include_directories( ${HDF5_INCLUDE_DIRS} )
link_directories( ${HDF5_LIBRARY_DIRS} )
add_executable(cpptorch main.cpp)
target_link_libraries(cpptorch ${HDF5_CXX_LIBRARIES})
target_link_libraries(cpptorch ${TORCH_LIBRARIES})
И запустите .sh
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
mkdir -p ${parent_path}/build
cd ${parent_path}/build
echo ${parent_path}
cmake -DCMAKE_PREFIX_PATH=${parent_path}/third_party/libtorch ..
make
./cpptorch
cd ..
А теперь я опишу проблему.Например, когда в CMake я закомментирую все строки, связанные с HDF5, то torch работает нормально, то же самое, когда я закомментирую строки Torch в CMake - HDF5 работает хорошо.Но когда я пытаюсь запустить приведенный выше код, я получаю ошибки:
CMakeFiles/cpptorch.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x5b): undefined reference to `H5::H5File::H5File(std::string const&, unsigned int, H5::FileCreatPropList const&, H5::FileAccPropList const&)'
collect2: error: ld returned 1 exit status
CMakeFiles/cpptorch.dir/build.make:92: recipe for target 'cpptorch' failed
make[2]: *** [cpptorch] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/cpptorch.dir/all' failed
make[1]: *** [CMakeFiles/cpptorch.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
./run.sh: line 8: ./cpptorch: No such file or directory
Если у кого-нибудь есть идеи, как это решить?Я считаю это проблемой связывания, но я не уверен.