使用 Cygwin 编译 HDF5 API
Posted
技术标签:
【中文标题】使用 Cygwin 编译 HDF5 API【英文标题】:Compiling HDF5 API Using Cygwin 【发布时间】:2013-09-15 13:02:33 【问题描述】:我一直在尝试使用 MinGW 和 Cygwin 在 Windows 中安装 HDF5 API。我已经放弃了 MinGW(在未能在其上编译 HDF5-1.8.11 之后),因为我需要在 Fortran 上使用 HDF5。
在运行配置 (bash) 脚本时将 Cygwin 与 HDF5-1.8.11 一起使用会产生错误,因此它甚至不会开始编译。我在this link 上读到 HDF5-1.8 在 Cygwin 上编译,包括 Fortran 模块。我下载了一个旧版本(HDF5-1.8.0)并且配置工作正常,但编译(第二次制作)给出以下错误:
Making all in src
make[1]: Entering directory `/cygdrive/c/hdf5-1.8.0/src'
make all-am
make[2]: Entering directory `/cygdrive/c/hdf5-1.8.0/src'
/bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I/cygdrive/c/cygwin/usr/include -DNDEBUG -UH5_DEBUG_API -ansi -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline -O3 -fomit-frame-pointer -finline-functions -MT H5Omtime.lo -MD -MP -MF .deps/H5Omtime.Tpo -c -o H5Omtime.lo H5Omtime.c
gcc -DHAVE_CONFIG_H -I. -I/cygdrive/c/cygwin/usr/include -DNDEBUG -UH5_DEBUG_API -ansi -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline -O3 -fomit-frame-pointer -finline-functions -MT H5Omtime.lo -MD -MP -MF .deps/H5Omtime.Tpo -c H5Omtime.c -o H5Omtime.o
In file included from H5private.h:29:0,
from H5Omtime.c:24:
H5public.h:154:18: warning: ISO C90 does not support ‘long long’ [-Wlong-long]
H5public.h:155:16: warning: ISO C90 does not support ‘long long’ [-Wlong-long]
H5Omtime.c: In function ‘H5O_mtime_decode’:
H5Omtime.c:194:9: warning: implicit declaration of function ‘tzset’ [-Wimplicit-function-declaration]
H5Omtime.c:194:9: warning: nested extern declaration of ‘tzset’ [-Wnested-externs]
H5Omtime.c:230:17: error: ‘timezone’ undeclared (first use in this function)
H5Omtime.c:230:17: note: each undeclared identifier is reported only once for each function it appears in
Makefile:813: recipe for target `H5Omtime.lo' failed
make[2]: *** [H5Omtime.lo] Error 1
make[2]: Leaving directory `/cygdrive/c/hdf5-1.8.0/src'
Makefile:488: recipe for target `all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory `/cygdrive/c/hdf5-1.8.0/src'
Makefile:410: recipe for target `all-recursive' failed
make: *** [all-recursive] Error 1
我将不胜感激任何帮助!谢谢!
【问题讨论】:
似乎找不到time.h
。查看此帖子:***.com/questions/12749529/…
实际上配置脚本报告同时找到 time.h 和 sys/time.h
【参考方案1】:
我能够重现此错误。似乎配置脚本设置了许多#define
标志,这些标志表明timezone
全局变量的存在,实际上它在cygwin 环境中不存在,因此在错误消息中报告缺失。通过从头文件 H5pubconf.h 中删除 #define H5_HAVE_TIMEZONE
,我能够摆脱这个错误。
不幸的是,在make过程中又出现了一个错误,也可以通过从同一个头文件H5pubconf.h中删除#define H5_HAVE_GETPWUID
来避免。
虽然这并不能解释配置过程中真正出了什么问题,但通过这两个修改,我能够成功编译库。
【讨论】:
以上是关于使用 Cygwin 编译 HDF5 API的主要内容,如果未能解决你的问题,请参考以下文章