我最近在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