Niedawno zainstalowałem bibliotekę na komputerze ubuntu i mam problemy z połączeniem z wyeksportowanymi funkcjami. Napisałem prosty skrypt testowy readHDF.cpp wyjaśnić kwestię:g ++ błąd kompilacji: niezdefiniowane odwołanie do funkcji biblioteki współdzielonej, która istnieje
#include <hdf5.h>
int main(int argc, char * argv[])
{
hid_t h5_file_id = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}
Komenda kompilacji jest
g++ -Wl,-rpath,$HOME/hdf5/lib -I$HOME/hdf5/include \
-L$HOME/hdf5/lib -l:$HOME/hdf5/lib/libhdf5.so readHDF.cpp
która zwraca następujący błąd
/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
Jestem zdezorientowany, ponieważ Komenda nm wydaje się mówić, że funkcja została wyeksportowana:
nm -C $HOME/hdf5/lib/libhdf5.so | grep H5check_version
która zwraca
0000000000034349 T H5check_version
i podobny wynik do H5Fopen
. Jakieś myśli o tym, co może pójść nie tak? Nie wiem, czy to pomoże, ale jeśli mogę wypowiedzieć się część H5Fopen
skryptu, a następnie kompiluje grzywny:
#include <hdf5.h>
int main(int argc, char * argv[])
{
hid_t h5_file_id;// = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}
Ponadto istnieje wiele wersji zainstalowanej na serwerze hdf5, które są wykorzystywane przez różne moduły Pythona, takich jak h5py i tabele, ale nie mogłem uzyskać żadnego z nich do pracy, więc zainstalowałem tę wersję w moim lokalnym katalogu i zmieniłem opcje rpath dla g ++ linker.
Dziwne. Umieszczając '-lhdf5' przed skryptem i wszystko działa poprawnie. Po umieszczeniu go po skrypcie powoduje błędy bibliotek. – Mathias711
Nie mogę tego zrobić wystarczająco. Dzięki! – stormbreaker
+500 jeśli mogę – johnjg12