我正在尝试编辑一个大型的风洞模拟程序,将输出文件转换为.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示例代码。
我的输出错误如下:
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发布于 2017-10-13 07:35:12
通常,由于名称混乱问题、异常的不同二进制规范等原因,必须为特定的目标编译器显式构建C++库。您最好的选择可能是使用MinGW从源代码构建HDF5库并使用它。
另请参阅here (MinGW文档)。
发布于 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/文件夹中。
/* ~~~~ 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 13)获取MSYS linux windows命令行仿真器。这是一个设计用于与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“-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++程序和输出文件以供参考
祝你编码愉快!
https://stackoverflow.com/questions/46695466
复制相似问题