我最近在 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;
}
服务器上还安装了多个版本的 hdf5,供各种 python 模块使用,例如 h5py 和表,但我无法让它们中的任何一个工作,所以我在本地目录中安装了这个版本并更改了 rpath 选项对于 g++ 链接器。