2012-04-18 2 views
3

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

Использование андроида-cmake с источником 3.4.0 net lib кажется мне почти успешным. Однако создание 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/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/prebuilt/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'

+0

Вы можете форматировать ваш связывая ошибка немного, или она должна быть одна длинная линия? – Chris

ответ

2

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

+0

Спасибо. Итак, моя инструментальная цепочка была построена с помощью OPTION_BIONIC, поэтому мышление sincos доступно? Но libm от pre Android 2.3, так что это действительно не доступно? – kb1ooo

Смежные вопросы