我正在尝试编辑一个大型的风洞模拟以吐出.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
答案 0 :(得分:0)
通常,由于名称错位问题,异常的二进制规范不同等,必须为特定目标编译器显式构建C ++库。最好的办法是使用MinGW从源代码构建HDF5库。并使用它。
另请参阅here(MinGW docs)。
答案 1 :(得分:0)
我自己会回答这个问题,因为网上根本没有任何关于使用HDF5 + Windows + MinGW GCC + Eclipse的资源。
安装HDF5以供以下使用的说明: -Eclipse CDT Neon -Windows 7 Enterprise -C ++编程 -MinGW GCC编译器
1)确保您已使用管理员privelages登录。没有管理员权限,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 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项目设置中,进行以下更改: -add“hdf5-1.8.2 \ c ++ \ src”到你的包含路径。这是大多数c ++实用程序 -add“hdf5-1.8.2 \ src”到你的包含路径。这是大多数HDF5 C根实用程序 -add“hdf5-1.8.2 \ src.libs”到你的库文件夹搜索路径(-L) -add“hdf5”到您的库(-l)
**请注意,这不会让您一直使用C ++ API接口,但您可以使用C命令(https://support.hdfgroup.org/HDF5/doc1.8/)进行编程。 如果不遵循这些步骤,那么您将能够使用多个C接口命令,包括文件创建,但您的可执行文件将失败,因为它将是 无法找到数据类型接口。
***我将来附上一个示例C ++程序和输出文件以供参考
快乐的编码!