在构建 LAPACK 期间未解决的正弦



按照这里的说明,我构建了一个支持 Fortran 的 NDK 工具链(OSX、NDK-7b),目标是构建 LAPACK/BLAS。

将 android-cmake 与 3.4.0 net lib 源代码一起使用,似乎我几乎成功了。但是,在链接其中一个测试时,BLAS 构建失败(错误指出未解析的sincossincosf)。 稍加搜索就会发现,这些功能在旧版 Android 版本中不可用。我想知道解决这些功能的最佳方法是什么?

下面是链接错误的示例:

cd/Users/marc/software/lapack-3.4.0/Android/BLAS/TESTING &&/opt/local/bin/cmake -E cmake_link_script CMakeFiles/xblat2c.dir/link.txt --verbose=1 /opt/local/share/java/android-ndk-macosx/toolchains/arm-linux-androideabi-4.7.0/prebuilt/darwin-x86/bin/arm-linux-androideabi-gfortran -wl,--gc-sections -wl,-z,nocopyreloc -wl,--fix-cortex-a8 -wl,--no-undefined -lstdc++ -lsupc++ CMakeFiles/xblat2c.dir/cblat2.f.o -o ../../bin/xblat2c -rdynamic -L/Users/marc/software/lapack-3.4.0/Android/systemlibs/armeabi-v7a -L/opt/local/share/java/android-ndk-macosx/toolchains/arm-linux-androideabi-4.7.0/prebuilt/darwin-x86/user/libs/armeabi-v7a ../../lib/libblas.a -lm -wl,-rpath,/Users/marc/software/lapack-3.4.0/Android/systemlibs/armeabi-v7a:/opt/local/share/java/android-ndk-macosx/toolchains/arm-linux-androideabi-4.7.0/prebuilt/darwin-x86/user/libs/armeabi-v7a /opt/local/share/java/android-ndk-macOSX/toolchains/arm-linux-androideabi-

4.7.0/

prebuild/darwin-x86/lib/gcc/arm-linux-androideabi/4.7.0/../../../../arm-linux-androideabi/lib/libgfortran.a(c99_functions.o): In function cexpf': /opt/local/share/java/android-ndk-macosx/src/build/../gcc/gcc-4.7.0/libgfortran/intrinsics/c99_functions.c:910: undefined reference to sincosf'

GCC需要在编译时知道sincos是否可用。它根据目标执行此操作。在目标三元组的情况下 arm-linux-androideabi ,它会查看gcc/config/linux.h并在那里找到:

/* Whether we have sincos that follows the GNU extension.  */
#undef TARGET_HAS_SINCOS
#define TARGET_HAS_SINCOS (OPTION_GLIBC || OPTION_BIONIC)

包含仿生的原因是Android 2.3增加了对sincosf/sincos/sincosl的支持[1]。因此,您可以更新仿生或修补 GCC 以假设没有可用的sincos;另请参阅[2]。

[1] http://source-android.frandroid.com/bionic/libc/docs/CHANGES.TXT

[2] https://bugs.launchpad.net/linaro-android/+bug/908125

相关内容

  • 没有找到相关文章

最新更新