Android上的HDF5支持

Android上的HDF5支持,android,hdf5,Android,Hdf5,在安卓系统上,人们将如何使用该软件?本地的C++库可以为Android平台编译,然后使用HDF5 java绑定调用? 嗯,时间很长,没有人回答。目前,我正在做一个在Android上支持hdf5格式的项目。结果是我遇到了一个问题 兼容性:当前hdf5库是用本机代码编写的。只有使用android toolchain进行交叉编译时才有效。注意:JHDF5是一个相当好的HDF5Java库。但兼容问题仍然存在 您无法(轻松)使用Android的交叉编译器进行编译 如果你想让它正常工作,你需要在ARM设备上

在安卓系统上,人们将如何使用该软件?本地的C++库可以为Android平台编译,然后使用HDF5 java绑定调用?

嗯,时间很长,没有人回答。目前,我正在做一个在Android上支持hdf5格式的项目。结果是我遇到了一个问题

兼容性:当前hdf5库是用本机代码编写的。只有使用android toolchain进行交叉编译时才有效。注意:JHDF5是一个相当好的HDF5Java库。但兼容问题仍然存在

您无法(轻松)使用Android的交叉编译器进行编译 如果你想让它正常工作,你需要在ARM设备上编译,特别是在Android工具链上。老实说,不要在NDK项目中使用HDF5,因为即使您成功地生成了二进制文件,它也不受支持

我继续尝试使用NDK CMake gradle编译它,但它无法计算各种类型的大小。我以前见过这种行为,通常需要将可执行文件上传到模拟器或设备,运行它并读取结果。不酷

根据他们自己的观点:

不,在HDF5中交叉编译有两个问题

首先,HDF5在几个地方使用AC_TRY_RUN。此宏试图 编译并运行测试程序,但这不适用于 交叉编译,因为它为主机系统构建程序,以及 尝试在生成系统上运行它。要解决此问题,宏将 需要替换为非动态测试(即,确定 在不执行测试程序的情况下纠正设置),或修改每个 AC_TRY_RUN带有一个参数,告诉它交叉编译时应该做什么 (这可能意味着设定一个悲观的默认值 交叉汇编)

这些AC_-TRY_-RUN实例中有许多用于检查编译器 能力。例如,HDF5检查Fortran编译器 通过运行测试程序支持固有函数“SIZEOF”。 根据结果,将makefile条件设置为切换 构建H5test_类时要使用的源文件(在本例中 H5测试\种类\尺寸F.f90或H5测试\种类.f90)。还有很多C++ 编译器检查。其他AC_试运行检查包括:检查是否较大 支持文件,检查SZIP压缩是否可以编码,检查 如果gettimeofday使用timezone结构,还有更多用于检查的结构 转换能力

第二个(破坏交易?)问题是H5Tinit.c的产生, 在较小程度上,H5libsettings.c是实际生成的 在“制造”中,而不是通过配置。生成它们的程序是C 编译为在目标平台上运行的程序,但是 然后在构建平台的“生成”过程中运行,因此失败(或, 在某些情况下,只会产生不正确的结果)。HDF5需要 在配置期间生成这些源文件,而不执行 构建系统上的机器相关程序。(换言之 H5Tinit.c,HDF5需要做H5detect所做的事情,但在 可在生成配置期间运行的脚本语言 由于h5detect应该检测机器字节顺序和 目标平台上的浮点格式,当前没有 解决方案。)

解决这个问题的老办法 我已经发布了相当长的说明,告诉你如何解决问题,如何把它编译成一个要点,叫做

我已经用v1.8.18测试了这个公式,它仍然有效。以下是我写的一篇文章,作为编译
armeabi
armeabi-v7a
x86
的起点

但是在测试中,一些库函数似乎出现了导致崩溃的问题,因此正如我最初所说的,如果不能让编译干净地工作,您可能应该避免使用HDF5。

另一个解决方案可能是,它是一个纯Java HDF5库,因此不存在c/c++编译问题。只要将依赖项添加到您的Android项目中,它就会工作

该库处于早期阶段,因此如果您有问题,请打开一个问题


免责声明:我是jHDF的作者,所以可能会有偏见。

是的,这是我想为Android编译的HDF5库。我已经编辑了你的问题并重新打开了它。我的理解是,你可以为Android NDK编译HDF5库,但还没有弄清楚如何让它工作。如果我能找到答案,我会回答这个问题。…@troy.unrau我已经回答了这个问题。你应该看看我的答案。