3

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

我正在使用带有 Mac OS X lion 的 2009 年中期 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

尽管确切的错误取决于我要编译的代码。这是在我尝试编译示例程序时生成的。

有没有人有让 hdf5 在 Mac OS X 的 C 语言中工作的经验?我发现这一切都非常令人困惑。

顺便说一句,我通常使用python,并且经常使用h5py没有问题。

4

1 回答 1

1

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

如果您在 中安装了 hdf5 /usr/local/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`
于 2012-05-28T16:11:56.807 回答