我刚开始使用 C 和 HDF5,所以我的问题可能很容易回答。
我尝试了来自 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'
出了什么问题?
谢谢你的帮助!!!
最佳答案
编译时需要链接HDF5库。
你得到的错误意味着这些函数的代码丢失了,因为你没有链接包含它们的库文件。
最简单的方法是按照您提到的教程中的说明使用 h5cc
进行编译。否则,如果您更喜欢在 Eclipse 中编译,则需要搜索 linker flags 设置并添加正确的标志,您可以通过在终端中键入 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
一 block 一 block 的:
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
添加到链接器标志即可。
关于c - 在 Eclipse 中编译简单的 HDF5 示例时获取 ‘undefined reference to’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483473/