使用MinGW和CMake编译HDF5时出错

时间:2014-09-08 18:22:40

标签: c windows mingw hdf5

我正在尝试使用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二进制文件?

1 个答案:

答案 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

<强>步骤进行:

  1. 解压缩hdf5-1.8.13.zip文件。

  2. 下载CMake,然后运行GUI。

  3. 将源文件夹设置为<hdf5-location>/hdf5-1.8.13,将build文件夹设置为要放置Makefile的文件夹。

  4. CMake GUI

    1. 点击Configure,会出现一个弹出窗口。选择MinGW Makefiles选项作为项目的生成器,然后选择Use default native compilers option
    2. Project Generator

      1. 使用选项填充列表后,保持选中默认复选框,并选择BUILD_SHARED_LIBRARIES。现在好玩的开始了;编译。
      2. Options

        1. 在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
          
        2. 位于io.h的文件<MyFolder>/MinGW32/include/off64_t的每个实例更改为_off64_t

        3. 位于unistd.h的文件<MyFolder>/MinGW32/include/off_t的每个实例更改为_off_t

        4. 在MinGW / MSYS命令提示符下,将目录更改为HDF5 Makefile的位置(在步骤3中设置)。

        5. 键入命令Make并验证它是否已正确编译。

        6. 编译时,不要忘记包含标记-I/<your-HDF5-build-folder>/include/-L/<your-HDF5-build-folder>/bin/-lhdf5。快乐的编码。