如何在 Mac OS X 上的 C 程序中包含 hdf5 头文件?

Posted

技术标签:

【中文标题】如何在 Mac OS X 上的 C 程序中包含 hdf5 头文件?【英文标题】:How to include hdf5 header files in a C program on Mac OS X? 【发布时间】:2012-06-01 17:37:42 【问题描述】:

我正在尝试学习如何使用 C 进行编程,并且我希望能够将数据从 .hdf 文件导入到我的 C 程序中。

我使用的是 2009 年中期配备 Mac OS X lion 的 MacBook Pro。

我认为我遇到了问题,因为我不知道将所有与 hdd 关联的头文件放在系统的哪个位置(请记住,我有点菜鸟)。所以我只是从hdd网站下载了hdf5-1.8.9-freebsd-shared文件夹,然后手动将/include子目录下的所有.h文件拖到了/usr/include目录下到我的电脑上。

当我尝试使用普通的 gcc 终端命令编译我的 .c 程序时,我收到一个错误,类似于以下内容(对格式感到抱歉,但我认为确切的错误并不重要):

Undefined symbols for architecture x86_64:
  "_H5check_version", referenced from:
      _main in cc9FVO6S.o
  "_H5Fcreate", referenced from:
      _main in cc9FVO6S.o
  "_H5Screate_simple", referenced from:
      _main in cc9FVO6S.o
  "_H5open", referenced from:
      _main in cc9FVO6S.o
  "_H5T_STD_I32LE_g", referenced from:
      _main in cc9FVO6S.o
  "_H5Dcreate2", referenced from:
      _main in cc9FVO6S.o
  "_H5T_NATIVE_INT_g", referenced from:
      _main in cc9FVO6S.o
  "_H5Dwrite", referenced from:
      _main in cc9FVO6S.o
  "_H5Dclose", referenced from:
      _main in cc9FVO6S.o
  "_H5Sclose", referenced from:
      _main in cc9FVO6S.o
  "_H5Fclose", referenced from:
      _main in cc9FVO6S.o
  "_H5Fopen", referenced from:
      _main in cc9FVO6S.o
  "_H5Dopen2", referenced from:
      _main in cc9FVO6S.o
  "_H5Dread", referenced from:
      _main in cc9FVO6S.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

虽然确切的错误取决于我要编译的代码。这是在我尝试编译 sample program 时生成的。

有没有人有过让 hdf5 在 Mac OS X 中用 C 语言工作的经验?我发现这一切都很混乱。

顺便说一下,我平时用python,经常用h5py没问题。

【问题讨论】:

这个库的 freebsd 版本在 OSX 上工作似乎是一个相当随机的猜测。找到一个 OSX 版本,或者自己编译一个。除了包含头文件你还需要链接到 hdf5 库,这里的错误信息说你没有 【参考方案1】:

当您使用 -l<library-name>-L<library-dir> 用于非标准位置的库时,您必须告诉链接器。

如果你在/usr/local/hdf5 中安装了 hdf5,你需要类似的东西:

gcc -o h5ex_d_rdwr h5ex_d_rdwr.c -I/usr/local/hdf5/include -L/usr/local/hdf5/lib -lhdf5

如果您使用的是高级 API,还请添加 -lhdf5_hl


如果您安装了 pkg-config 并且它知道您的 hdf5 安装,您可以让它为您完成:

gcc -o h5ex_d_rdwr h5ex_d_rdwr.c `pkg-config hdf5 --cflags --libs`

【讨论】:

以上是关于如何在 Mac OS X 上的 C 程序中包含 hdf5 头文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac OS 的发布版本中包含 Qt 库?

在窗口中包含C(unistd.h)的基础库

如何在 Mac OS X 上设置 libusb?

如何将光标锁定在 Mac OS X 上的窗口内部?

如何在 Mac OS X 上的 QMenubar 中隐藏服务项目?

如何在 Mac OS X 上构建包含入口点的 C 程序?