2012-04-18 23 views
3

指示に従いますhere LAPACK/BLASを構築する目的で、Fortran対応のNDKツールチェーン(OSX、NDK-7b)を構築しました。LAPACKのビルド中に未解決のsincos

3.4.0 net libソースを使ってandroid-cmakeを使用すると、ほぼ成功しているようです。ただし、テストの1つをリンクするときに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) 

ニックを含める理由は、Android 2.3 [1] sincosf/sincos/sincoslのサポートを追加することです。したがって、Bionicを更新するか、またはGCCにパッチを当ててsincosが利用できないと仮定することができます。 cf.また[2]。

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

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

+0

ありがとうございます。だから、私のtoolchainはOPTION_BIONICで作られていたので、sincosは利用可能だと思っていますか?しかしlibmはAndroid 2.3以前のものですから、本当に利用できませんか? – kb1ooo