Неразрешени sincos по време на изграждането на LAPACK

Следвайки инструкциите тук аз са изградили NDK инструментална верига с активиран Fortran (OSX, NDK-7b) с цел изграждане на LAPACK/BLAS.

Използвайки android-cmake с източника 3.4.0 net lib, изглежда, че съм почти успешен. Въпреки това компилацията на BLAS се проваля при свързване на един от тестовете (с грешка, посочваща неразрешени sincos и sincosf). Малко търсене разкрива, че тези функции не са налични в наследените версии на Android. Чудя се кой е най-добрият начин за разрешаване на тези функции?

По-долу е даден пример за грешка при свързване:

cd /Users/marc/software/lapack-3.4.0/Android/BLAS/ТЕСТВАНЕ && /opt/local/bin/cmake -E cmake_link_script CMakeFiles/xblat2c.dir/link.txt --verbose=1 /opt/local/ споделяне/java/android-ndk-macosx/toolchains/arm-linux-androideabi-4.7.0/prebuilt/darwin-x86/bin/arm-linux-androideabi-gfortran -Wl,--gc-секции -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/prebuilt/darwin-x86/lib/gcc/arm-linux-androideabi/4.7.0/../../../../arm-linux-androideabi/lib/libgfortran.a(c99_functions. o): Във функция cexpf': /opt/local/share/java/android-ndk-macosx/src/build/../gcc/gcc-4.7.0/libgfortran/intrinsics/c99_functions.c:910: undefined reference tosincosf'


person kb1ooo    schedule 18.04.2012    source източник
comment
Можете ли да форматирате грешката си при свързване малко или трябва да е един дълъг ред?   -  person Chris    schedule 18.04.2012


Отговори (1)


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)

Причината за включването на Bionic е, че Android 2.3 добави поддръжка за sincosf/sincos/sincosl [1]. По този начин можете или да актуализирате Bionic, или да коригирате GCC, за да приемете, че няма наличен sincos; вж. също [2].

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

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

person Tobias    schedule 18.04.2012
comment
Благодаря. И така, моята верига от инструменти е изградена с OPTION_BIONIC, следователно мисля, че sincos е наличен? Но libm е от преди Android 2.3, така че наистина не е наличен? - person kb1ooo; 18.04.2012