我最近在ubuntu机器上安装了hdf5库,现在无法链接到导出的函数。我写了一个简单的测试脚本readHDF.cpp来解释这个问题:g ++编译错误:未定义引用存在的共享库函数
#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;
}
也有它们通过各种Python模块,如使用服务器上安装的HDF5的多个版本h5py和tables,但是我无法让它们工作,所以我在我的本地目录中安装了这个版本,并更改了g ++链接器的rpath选项。
奇怪。在脚本之前加上'-lhdf5',一切正常。当我把它放在脚本之后时,它会给图书馆带来错误。 – Mathias711 2014-04-14 11:51:20
我不能满足这个要求。谢谢! – stormbreaker 2014-10-09 13:20:11
+500如果我可以 – johnjg12 2017-02-25 19:17:46