Android NDK:LIBC 支持硬质量
Android NDK: libc++ support for hard-float
我在编译使用多个自定义C 库的小Java程序时遇到了问题。所有图书馆都针对Armeabi-V7a,并用硬质支持(mfloat-abi = Hard(编译-mfpu = neon -mhard -float -d_ndk_math_no_softfp = 1(。我还有其他几个CPP文件是Java/Android项目的一部分;这些也通过上述设置进行了编译,我链接到libm_hard.a(而不是libm.a(
运行程序时,我会从CPP文件(不是自定义库(中获得奇怪的行为,类似于ARM Cortex A9交叉编译奇怪的浮点行为。合法的浮点值(在代码中,通过调试器检查(在stdout或fstream上打印为极小的值(例如1.47895e-309(。
std::ofstream os;
os.open(filename, std::ios::out);
double x = 0.34343;
double y = log(0.1);
os << x << "t" << y << endl;
os.close();
似乎发生了这种情况,因为Libc 库未针对硬质量汇编;我尝试了libc 的静态和共享版本,并且得到了相同的行为。我还通过Readelf对它们进行了检查,看来它们没有用于硬质量流动(没有提及VPF寄存器(。我找不到libc 的版本(静态或共享(,该版本是在NDK中编译的。
- Android SDK:21(也用23次尝试(
- NDK:14.1.3816874
- Android Studio:2.3.1
我无法(轻松地(将上游库从硬浮动库更改为softfp;有些专注于重型矩阵处理,并针对硬质量浮动进行了优化。而且,据我了解,我不能混合软fp和硬质量...
除了重新编译libc 以进行硬流畅,我还有其他选择吗?(我了解前一段时间Google放弃了对Hard Abi的支持,这一定有相应的LIBC 库(
编辑:添加了示例代码
r12中的ndk删除了硬浮动abi支撑>
停止使用libm_hard,您应该没问题(不要删除这是R15中修复的监督,对此感到抱歉!(。
非常重要的是要注意,非固定的ABI仍然使用浮点说明。唯一的区别是函数参数通过ABI。
- 编译时未启用intel oneApi CUDA支持
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 扩展光电二极管探测器以支持多个传感器
- MSVC是否支持C++11样式的属性而不是__declspec
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 安装 libc++ 时出现问题
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 哪个C++规范开始支持 std::vector
- 如何检测VS C++编译器是否支持C++11?
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- Casablanca/cpprestsdk listener.support接受函数,但不支持方法
- 为什么libc++不支持在多集上推导类模板参数?
- Android NDK:LIBC 支持硬质量
- 在Apple llvm 4.1上使用libc++与libstc++时,c++11支持的确切区别是什么