2014-03-18 3 views
1

Я только что начал с C, а также с HDF5, поэтому мой вопрос может быть очень легко ответить.Получение «неопределенной ссылки» при компиляции простого примера HDF5 в Eclipse

Я попробовал пример-код от http://beige.ucs.indiana.edu/I590/node122.html, чтобы создать файл HDF5.

#include "hdf5.h" 
#define FILE "file.h5" 

main() { 

    hid_t  file_id; /* file identifier */ 
    herr_t  status; 

    /* Create a new file using default properties. */ 
    file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); 

    /* Terminate access to the file. */ 
    status = H5Fclose(file_id); 
} 

Я попытался скомпилировать это с Eclipse, и получили сообщения об ошибках 5:

make: *** [Read_HDF5] Error 1 
skipping incompatible /usr/lib/libc.so when searching for -lc 
undefined reference to `H5check_version' 
undefined reference to `H5Fcreate' 
undefined reference to `H5Fclose' 

Что пошло не так?

Спасибо за помощь!

ответ

1

При компиляции вам необходимо связать библиотеку HDF5. Ошибки, которые вы получаете, означают, что код для этих функций отсутствует, потому что вы не связали файл библиотеки, который их содержит. Самый простой способ - скомпилировать, используя h5cc, как описано в уроке, о котором вы упомянули. В противном случае, если вы предпочитаете компиляцию в Eclipse, вам нужно найти флаги компоновщика и добавить правильные флаги, которые вы можете найти, набрав h5cc -show в терминале.

Например, для меня, h5cc -show дает

clang -I/usr/local/include -L/usr/local/Cellar/hdf5/1.8.12/lib /usr/local/Cellar/hdf5/1.8.12/lib/libhdf5_hl.a /usr/local/Cellar/hdf5/1.8.12/lib/libhdf5.a -L/usr/local/lib -lsz -lz -ldl -lm 

по кусочкам:

  • clang является компилятор

  • -I/usr/local/include флажок говорит, что компилятор для поиска заголовка файлов в каталоге /usr/local/include

  • -L/usr/local/Cellar/hdf5/1.8.12/lib и -L/usr/local/lib флаги, рассказывающие компоновщик для поиска библиотек внутри этих каталогов

  • /usr/local/Cellar/hdf5/1.8.12/lib/libhdf5_hl.a и /usr/local/Cellar/hdf5/1.8.12/lib/libhdf5.a являются полный путь к двум HDF5 статических библиотек (говоря компоновщик, чтобы связать их)

  • -lsz, -lz, -ldl и -lm флаги, рассказывающие компоновщик, чтобы связать библиотеки sz, z, dl и m

Это, вероятно, избыток. Если ваш HDF5 установлен в стандартном местоположении, может быть достаточно просто добавить -lhdf5 к флагам компоновщика.

+0

Спасибо! У меня есть, как исправить мою проблему: Я включил библиотеку для 32-битных систем, а также библиотеку для 64-битных систем. То, откуда появляется сообщение об ошибке пропуска. Спасибо! – smaica

Смежные вопросы