我刚刚开始使用 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);
}
Run Code Online (Sandbox Code Playgroud)
我尝试用 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'
Run Code Online (Sandbox Code Playgroud)
什么地方出了错?
谢谢你的帮助!
编译时需要链接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
Run Code Online (Sandbox Code Playgroud)
一点一点:
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链接器标志就足够了。
| 归档时间: |
|
| 查看次数: |
11785 次 |
| 最近记录: |