Недавно я установил библиотеку hdf5 на машине ubuntu, и теперь у меня возникли проблемы с привязкой к экспортированным функциям. Я написал простой тест script readHDF.cpp, чтобы объяснить проблему:
#include <hdf5.h>
int main(int argc, char * argv[])
{
hid_t h5_file_id = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}
Команда компиляции
g++ -Wl,-rpath,$HOME/hdf5/lib -I$HOME/hdf5/include \
-L$HOME/hdf5/lib -l:$HOME/hdf5/lib/libhdf5.so readHDF.cpp
который возвращает следующую ошибку
/tmp/cc6DXdxV.o: In function `main':
readHDF.cpp:(.text+0x1f): undefined reference to `H5check_version'
readHDF.cpp:(.text+0x3c): undefined reference to `H5Fopen'
collect2: ld returned 1 exit status
Я запутался, потому что команда nm, кажется, говорит, что функция была экспортирована:
nm -C $HOME/hdf5/lib/libhdf5.so | grep H5check_version
который возвращает
0000000000034349 T H5check_version
и аналогичный результат для H5Fopen
. Любые мысли о том, что может пойти не так? Не уверен, что это помогает, но если я прокомментирую часть H5Fopen
script, тогда она компилируется отлично:
#include <hdf5.h>
int main(int argc, char * argv[])
{
hid_t h5_file_id;// = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}
Также на сервере установлены несколько версий hdf5, которые используются различными модулями python, такими как h5py и таблицы, но я не мог заставить их работать, поэтому я установил эту версию в свой локальный каталог и изменил опции rpath для компоновщика g++.