最近、ubuntu マシンにhdf5ライブラリをインストールしましたが、エクスポートされた関数へのリンクに問題があります。この問題を説明するために、簡単なテスト スクリプト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
正常にコンパイルされます。
#include <hdf5.h>
int main(int argc, char * argv[])
{
hid_t h5_file_id;// = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}
また、h5py やテーブルなどのさまざまな python モジュールで使用される hdf5 の複数のバージョンがサーバーにインストールされていますが、それらのいずれも動作させることができなかったため、このバージョンをローカル ディレクトリにインストールし、rpath オプションを変更しました。 g++ リンカ用。