首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HDF5 + Eclipse CDT错误

HDF5 + Eclipse CDT错误
EN

Stack Overflow用户
提问于 2017-10-12 02:45:57
回答 2查看 130关注 0票数 0

我正在尝试编辑一个大型的风洞模拟程序,将输出文件转换为.hdf5格式,而不是当前的.CSV格式。

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

问题是--我无法在没有“未定义引用”错误的情况下获得任何链接。我最初使用的是用于windows的HDF5 1.8.19发行版,但其中包含的.lib + .dll文件是专门为MSVS2013编译器设计的。由于与g++的兼容性,我已经改用Linux行结尾,但我仍然收到大量“未定义的引用”错误。

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

有什么想法吗?有没有人有过使用eclipse和HDF5接口的经验?

我只是在尝试运行this示例代码。

我的输出错误如下:

代码语言:javascript
复制
    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
EN

回答 2

Stack Overflow用户

发布于 2017-10-13 07:35:12

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

另请参阅here (MinGW文档)。

票数 0
EN

Stack Overflow用户

发布于 2017-10-28 02:41:05

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

安装HDF5以便与以下产品配合使用的说明:-Eclipse CDT Neon -Windows 7企业版-C++编程-MinGW GCC编译器

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

2)获取HDF5 1.8.2版本。这可以通过以下网址获得: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/文件夹中。

代码语言:javascript
复制
    /* ~~~~ 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)获取MSYS linux windows命令行仿真器。这是一个设计用于与MinGW交互的工具,并提供类似Lunix的实用程序。我们特别感兴趣的是"./configure“、"make”和"make install“命令。它可以在这里获得:http://www.mingw.org/wiki/MSYS

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

代码语言:javascript
复制
    $ ./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“-add到您的包含路径。这是大多数c++实用程序-add "hdf5-1.8.2\src“到您的包含路径。这是大多数HDF5 C根实用程序-add "hdf5-1.8.2\src.libs“到您的库文件夹搜索路径(-L) -add "hdf5”到您的库(-l)

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

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

祝你编码愉快!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46695466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档