如何在 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 头文件?的主要内容,如果未能解决你的问题,请参考以下文章