在使用Eclipse编译简单的HDF5示例时出现“undefined reference to”错误

5
我刚开始学习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'

出了什么问题?

感谢您的帮助!!!

1个回答

6
您在编译时需要链接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, dlm

这可能过于复杂了。如果您的 HDF5 安装在标准位置,则只需将 -lhdf5 添加到链接器标志中即可。


我知道如何解决我的问题了:我同时包含了32位系统的库和64位系统的库。这就是跳过错误消息的原因。谢谢! - smaica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接