2012-04-18 3 views
3

지침을 따르십시오. here LAPACK/BLAS 구축이라는 목표로 Fortran 지원 NDK 툴 체인 (OSX, NDK-7b)을 구축했습니다.LAPACK을 빌드하는 동안 미해결 sincos

3.4.0 net lib 소스와 함께 android-cmake를 사용하면 거의 성공적으로 보입니다. 그러나 테스트 중 하나를 연결할 때 BLAS 빌드가 실패합니다 (확인되지 ​​않은 sincossincosf이라는 오류가 있음). 조금만 조사하면 레거시 안드로이드 버전에서는 이러한 기능을 사용할 수 없다는 사실이 드러납니다. 이러한 기능을 해결하는 가장 좋은 방법은 무엇입니까?

은 아래이며, 연결 오류의 예 :

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) 

이유 안드로이드 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은 Android 2.3 이전 버전에서 제공되었으므로 실제로 사용할 수 없습니까? – kb1ooo

관련 문제