c - 在 Eclipse 中编译简单的 HDF5 示例时获取 ‘undefined reference to’

标签 c eclipse hdf5

我刚开始使用 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 是告诉链接器的标志链接库 szzdlm

这可能有点矫枉过正。如果您的 HDF5 安装在标准位置,则只需将 -lhdf5 添加到链接器标志即可。

关于c - 在 Eclipse 中编译简单的 HDF5 示例时获取 ‘undefined reference to’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483473/

相关文章:

java - 导入的maven项目尝试使用jre系统库

python-3.x - 使用python 3.6安装自定义构建tensorflow 1.12车轮时出错

c - 二分查找没有给出正确的输出

c - C 中连续两次 printf() 调用的奇怪行为

c - 如何仅使用标准库分配对齐的内存?

java - 从 Eclipse 内部运行时如何访问 <tomcat>\bin\*.properties?

java - C 中的未知字节写入结构

java - 当我在构建时使用配置文件填充属性文件时,如何在 Eclipse 中运行 Maven webapp?

python - 高效的HDF5/PyTables布局,可在大张量上保存和操作

python - 如何读取/写入 HDF5 存储中的子组?