Неразрешенные синко во время сборки LAPACK

Следуя инструкциям, здесь, я создали инструментальную цепочку NDK с поддержкой Fortran (OSX, NDK-7b) с целью создания LAPACK / BLAS.

Используя android-cmake с исходным кодом net lib 3.4.0, мне кажется, что я почти добился успеха. Однако сборка BLAS завершается ошибкой при связывании одного из тестов (с ошибкой, указывающей на неразрешенные sincos и sincosf). Небольшой поиск показывает, что эти функции недоступны в старых версиях 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 / общий доступ / java / android-ndk-macosx / toolchains / arm-linux-androidabi-4.7.0 / prebuilt / darwin-x86 / bin / arm-linux-androideabi-gfortran -Wl, - gc-section -Wl, -z , nocopyreloc -Wl, - fix-cortex-a8 -Wl, - no-undefined -lstdc ++ -lsupc ++ CMakeFiles / xblat2c.dir / cblat2.fo -o ../../bin/xblat2c -rdynamic -L / Пользователи /marc/software/lapack-3.4.0/Android/systemlibs/armeabi-v7a -L / opt / local / share / java / android-ndk-macosx / toolchains / arm-linux-androidabi-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-androidabi-4.7.0/prebuilt/darwin-x86/user/libs/armeabi-v7a / opt / local / share / java / android -ndk-macosx / цепочки инструментов / arm-linux-androidabi-

4.7.0 / prebuilt / darwin-x86 / lib / gcc / arm-linux-androidabi / 4.7.0 /../../../../ arm-linux-androidabi / 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 добавлена ​​поддержка _5 _ / _ 6 _ / _ 7_ [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