我正在尝试使用MinGW的gcc 4.8.1和CMake编译HDF5。我按照Windows INSTALL_CMake
文档中的说明操作,阅读了我在Google上找到的所有内容,但仍然出现以下错误:
In file included from c:\mingw32-xy\include\fcntl.h:37:0,
from C:\Users\jicervan.NDC\Downloads\hdf5-1.8.13\hdf5-1.8.13\src\H5private.h:53,
from C:\Users\jicervan.NDC\Downloads\hdf5-1.8.13\hdf5-1.8.13\src\H5detect.c:57:
c:\mingw32-xy\include\io.h:301:1: error: unknown type name 'off64_t'
__CRT_INLINE off64_t lseek64 (int, off64_t, int);
^
c:\mingw32-xy\include\io.h:301:36: error: unknown type name 'off64_t'
__CRT_INLINE off64_t lseek64 (int, off64_t, int);
^
c:\mingw32-xy\include\io.h:302:1: error: unknown type name 'off64_t'
__CRT_INLINE off64_t lseek64 (int fd, off64_t offset, int whence) {
^
c:\mingw32-xy\include\io.h:302:39: error: unknown type name 'off64_t'
__CRT_INLINE off64_t lseek64 (int fd, off64_t offset, int whence) {
^
In file included from C:\Users\jicervan.NDC\Downloads\hdf5-1.8.13\hdf5-1.8.13\src\H5private.h:70:0,
from C:\Users\jicervan.NDC\Downloads\hdf5-1.8.13\hdf5-1.8.13\src\H5detect.c:57:
c:\mingw32-xy\include\unistd.h:65:20: error: unknown type name 'off_t'
int ftruncate(int, off_t);
错误和警告会随着一长串警告和未定义而不断发生。有人对如何解决这个问题有任何建议吗?是否还有其他替代方案,例如使用与MinGW一起使用Visual Studio二进制文件?
答案 0 :(得分:4)
我终于开始工作了。我的第一次尝试是根据configure
文件中的文档使用make
和/release_docs/INSTALL_MinGW.txt
,但它不起作用。我最终使用了CMake。出于文档目的,这是我遵循的程序:
OPERATING SYSTEM: Windows 8.1 pro
COMPILER: CMake + MinGW gcc version 4.8.1
HDF5 VERSION: 1.8.13
<强>步骤进行:强>
解压缩hdf5-1.8.13.zip
文件。
下载CMake,然后运行GUI。
将源文件夹设置为<hdf5-location>/hdf5-1.8.13
,将build文件夹设置为要放置Makefile的文件夹。
Configure
,会出现一个弹出窗口。选择MinGW Makefiles
选项作为项目的生成器,然后选择Use default native compilers option
。
BUILD_SHARED_LIBRARIES
。现在好玩的开始了;编译。
在HDF5构建文件夹中找到文件H5pubconfig.h
文件,并附加以下行:
// Define Windows 32
#ifndef H5_HAVE_WIN32_API
#ifdef WIN32 /* defined for all windows systems */
#define H5_HAVE_WIN32_API 1
#endif
#endif
// Define MinGW
#ifndef H5_HAVE_MINGW
#ifdef __MINGW32__ /*defined for all MinGW compilers */
#define H5_HAVE_MINGW 1
#endif
#endif
// Redefine _In_ and _Out_ to empty values
#define _In_
#define _Out_
// Redefine off_t and off64_t to match io.h and unistd.h
#define off_t _off_t
#define off64_t _off64_t
位于io.h
的文件<MyFolder>/MinGW32/include/
将off64_t
的每个实例更改为_off64_t
。
位于unistd.h
的文件<MyFolder>/MinGW32/include/
将off_t
的每个实例更改为_off_t
。
在MinGW / MSYS命令提示符下,将目录更改为HDF5 Makefile的位置(在步骤3中设置)。
键入命令Make
并验证它是否已正确编译。
编译时,不要忘记包含标记-I/<your-HDF5-build-folder>/include/
,-L/<your-HDF5-build-folder>/bin/
和-lhdf5
。快乐的编码。