gpt4 book ai didi

android - Android 交叉编译 FFTW 时如何启用 hard float

转载 作者:行者123 更新时间:2023-11-29 01:42:25 25 4
gpt4 key购买 nike

我正在尝试为在 ARM 设备上运行的 Android 编译第三方库 ( FFTW )。该库包含一个我想在我的设备上运行的基准测试工具。按照 Google 关于如何使用 NDK r9d 配置硬 float 的说明 ( https://developer.android.com/tools/sdk/ndk/index.html ),我使用以下标志:

NDK_ROOT="/opt/android/ndk"
TOOLCHAIN="$NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/"

export SYS_ROOT="$NDK_ROOT/platforms/android-18/arch-arm"
export CC="$TOOLCHAIN/arm-linux-androideabi-gcc --sysroot=$SYS_ROOT"
export LD="$TOOLCHAIN/arm-linux-androideabi-ld"
export AR="$TOOLCHAIN/arm-linux-androideabi-ar"
export NM="$TOOLCHAIN/arm-linux-androideabi-nm"
export RANLIB="$TOOLCHAIN/arm-linux-androideabi-ranlib"
export STRIP="$TOOLCHAIN/arm-linux-androideabi-strip"

export CFLAGS="-mfpu=vfpv3-d16 -mhard-float -D_NDK_MATH_NO_SOFTFP=1"
export LDFLAGS="-Wl,-lm_hard -Wl,--no-warn-mismatch"


./configure \
--host=arm-linux-androideabi \
--disable-fortran \
--disable-shared \
--enable-static \
--enable-threads \
--with-combined-threads \
--enable-single \
--prefix=$INSTALL_DIR

使用此配置,基准测试性能极差。在我看来,该库是用 softfloat 编译的,或者链接了一个软浮点库。

如何配置库以使用硬 float ?我错过了一个重要的步骤吗?

我知道我设备上的 FPU 可以正常工作,因为我有第二台运行 ArchLinux 的设备,该设备上的库和基准测试按预期执行,即比 Android 快 600%。

最佳答案

为了在 libm_hard.a 中链接硬浮点版本的数学函数,您需要将 -lm_hard 放在所有目标文件之后但在 -lm 之前,这是Android的libc.so是用soft-float编译的。 LDFLAGS="-Wl,-lm_hard" 在 FFTW 中不起作用,因为它放在所有目标文件之前。 LIBS="-lm_hard" 可能有效,但配置集 LIBS="-lm $LIBS" 在最后,将 -lm 放入-lm_hard 前面。您可以在配置中删除该行以解决问题,但更好的解决方法是允许自定义系统数学库,或者如果 -lm_hard 是,则在 ltmain.sh 中过滤掉 -lm$host arm-*linux-android 提供。

关于android - Android 交叉编译 FFTW 时如何启用 hard float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23673404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com