Gần đây, tôi đã cài đặt thư viện hdf5 trên máy ubuntu và hiện đang gặp sự cố khi liên kết với các chức năng được xuất. Tôi đã viết một kịch bản thử nghiệm đơn giản readHDF.cpp để giải thích vấn đề này:lỗi biên dịch g ++: không xác định tham chiếu đến hàm thư viện được chia sẻ tồn tại
#include <hdf5.h>
int main(int argc, char * argv[])
{
hid_t h5_file_id = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}
Lệnh compile là
g++ -Wl,-rpath,$HOME/hdf5/lib -I$HOME/hdf5/include \
-L$HOME/hdf5/lib -l:$HOME/hdf5/lib/libhdf5.so readHDF.cpp
mà trả về lỗi sau
/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
Tôi đang bối rối vì lệnh nm dường như cho biết chức năng đã được xuất:
nm -C $HOME/hdf5/lib/libhdf5.so | grep H5check_version
trả về
0000000000034349 T H5check_version
và một kết quả tương tự cho H5Fopen
. Bất kỳ suy nghĩ về những gì có thể sẽ sai? Bạn không chắc chắn nếu nó giúp, nhưng nếu tôi nhận xét ra phần H5Fopen
của kịch bản, sau đó nó biên dịch tốt:
#include <hdf5.h>
int main(int argc, char * argv[])
{
hid_t h5_file_id;// = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}
Cũng có nhiều phiên bản của hdf5 cài đặt trên máy chủ được sử dụng bởi các module python khác nhau như h5py và bảng, nhưng tôi không thể nhận được bất kỳ của họ để làm việc, vì vậy tôi đã cài đặt phiên bản này trong thư mục địa phương của tôi và thay đổi các tùy chọn rpath cho g + + linker.
Lạ. Đặt '-lhdf5' trước tập lệnh và mọi thứ hoạt động tốt. Khi tôi đặt nó sau khi kịch bản, nó cung cấp cho các thư viện lỗi. – Mathias711
Tôi không thể upvote đủ. Cảm ơn! – stormbreaker
+500 nếu tôi có thể – johnjg12