【问题标题】:HDF5 + Eclipse CDT errorsHDF5 + Eclipse CDT 错误
【发布时间】:2018-03-23 13:21:24
【问题描述】:

我正在尝试编辑一个大型风洞模拟以输出 .hdf5 格式而不是当前格式 .CSV 的输出文件。

整个模拟目前在 Eclipse CDT 上运行,并在 Windows 和 Linux 平台上使用 MinGW g++ 编译和链接;我正在使用 Windows 7 企业版设备。我的工作是编辑几行模拟源代码以输出 HDF5 格式的文件。

问题是——如果没有“未定义引用”错误的大杂烩,我无法获得任何链接。我开始使用 Windows 的 HDF5 1.8.19 发行版,但包含的 .lib + .dll 文件是专门为 MSVS2013 编译器设计的。由于 g++ 兼容性,我已经改用 Linux 行尾,但我仍然收到大量“未定义引用”错误。

我正在链接库和包含文件,并且我还在链接它们的搜索路径。问题似乎是由于某种原因 MinGW 链接器无法读取 libhdf5_cpp.a 文件中的符号名称。

有什么想法吗?有没有人有尝试将 Eclipse 与 HDF5 接口的经验?

我只是想运行this 示例代码。

我的输出错误如下:

    g++ "-LC:\\Users\\jk5759\\workspace\\HDF5_Test" -o HDF5_Test.exe main.o -lhdf5_cpp -static 
main.o: In function `main':
C:\Users\jk5759\workspace\HDF5_Test\Debug/../main.cpp:14: undefined reference to `H5check_version'
C:\Users\jk5759\workspace\HDF5_Test\Debug/../main.cpp:14: undefined reference to `H5Fcreate'
C:\Users\jk5759\workspace\HDF5_Test\Debug/../main.cpp:17: undefined reference to `H5Fclose'
collect2: ld returned 1 exit status

【问题讨论】:

    标签: c++ windows eclipse gcc hdf5


    【解决方案1】:

    我将自己回答这个问题,因为网络上根本没有任何资源真正谈论使用 HDF5 + Windows + MinGW GCC + Eclipse。

    安装 HDF5 以用于以下操作的说明: -Eclipse CDT 霓虹灯 -Windows 7 企业版 -C++ 编程 -MinGW GCC 编译器

    1) 确保您以管理员权限登录。如果没有管理员权限,MinGW 和 MSYS 以及 HDF5 可能无法正确安装。

    2) 获取 HDF5 版本 1.8.2。这可通过以下 URL 获得:https://support.hdfgroup.org/ftp/HDF5/prev-releases/hdf5-1.8/hdf5-1.8.2/src/ 确保获得 .tar 版本。此文件夹仅包含源代码,未来仍需编辑。

    解压缩 tarball 并将其移动到您可以轻松找到的目录中。我的标签为“MyHDFstuff”,位于“Documents”文件夹中。 解压缩 tarball 后,找到所有名为 H5pubconf.h 的文件,并将以下行附加到程序末尾: 应该有两个H5pubconf.h文件,一个在/src/文件夹,一个在/windows/src/文件夹。

        /* ~~~~ User Added Code ~~~~ */
        #ifndef H5_HAVE_WIN32_API
        #ifdef WIN32 /* defined for all windows systems */
        #define H5_HAVE_WIN32_API 1
        #endif
        #endif
    
        #ifndef H5_HAVE_MINGW
        #ifdef __MINGW32__ /*defined for all MinGW compilers */
        #define H5_HAVE_MINGW 1
        #endif
        #endif
    
        //fixes second problem
        #define H5_BUILT_AS_DYNAMIC_LIB 1
    

    3) 获取 Windows 的 MSYS linux 命令行模拟器。这是一个旨在与 MinGW 交互并提供类似 Lunix 的实用程序的工具。 我们特别感兴趣的是“./configure”、“make”和“make install”命令。可以在这里获取:http://www.mingw.org/wiki/MSYS

    4) 启动 MSYS。使用“cd”命令导航到 MSYS 中的“MyHDFstuff”文件夹。在 MSYS 提示符下运行以下命令:

        $ ./configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --disable-hl --prefix=$HOME  
        $ make
        $ make check
        $ make install
    

    这将为 MinGW 编译器构建 HDF5 库。你应该得到一个错误——忽略它,它不会阻止你的代码编译和运行。

    5) 在您的 Eclipse 项目设置中,进行以下更改: - 将“hdf5-1.8.2\c++\src”添加到您的包含路径。这是大多数 c++ 实用程序 - 将“hdf5-1.8.2\src”添加到您的包含路径。这是大多数 HDF5 C 根实用程序 -将“hdf5-1.8.2\src.libs”添加到您的库文件夹搜索路径 (-L) -将“hdf5”添加到您的库中(-l)

    ** 注意,这不会让您完全使用 C++ API 接口,但您可以使用 C 命令 (https://support.hdfgroup.org/HDF5/doc1.8/) 进行编程。 如果不遵循这些步骤,那么您将能够使用几个 C 接口命令,包括文件创建,但您的可执行文件将失败,因为它将 找不到数据类型接口。

    ***以后我会附上一个示例C++程序和输出文件以供参考

    编码愉快!

    【讨论】:

      【解决方案2】:

      一般来说,由于名称修改问题、异常的不同二进制规范等,C++ 库必须为特定目标编译器显式构建。最好的选择可能是使用 MinGW 从源代码构建 HDF5 库并使用它。

      另请参阅here(MinGW 文档)。

      【讨论】:

        猜你喜欢
        • 2011-12-22
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2016-07-08
        • 2012-03-09
        • 2011-03-22
        • 2013-10-19
        • 2011-11-12
        相关资源
        最近更新 更多