2013-06-05 26 views
1

我正在嘗試爲Android(arm)編譯GMP,但收到一個非常奇怪的錯誤。首先,我建立了一些東西所描述的另一個SO問題hereAndroid平臺的GMP庫的配置錯誤

export NDKROOT=/prod/ndk 
    $NDKROOT/build/tools/make-standalone-toolchain.sh --platform=android-9 -- install-dir=$NDKROOT/android_armeabi 
    export CC="$NDKROOT/android_armeabi/bin/arm-linux-androideabi-gcc --sysroot=$NDKROOT/android_armeabi/sysroot" 
    export CXX="$NDKROOT/android_armeabi/bin/arm-linux-androideabi-g++ --sysroot=$NDKROOT/android_armeabi/sysroot" 
    export AR="$NDKROOT/android_armeabi/bin/arm-linux-androideabi-ar" 
    export SYSROOT="$NDKROOT/android_armeabi/sysroot" 
    export PATH="$NDKROOT/android_armeabi/bin":$PATH 

然後,我只是跑./configure --enable-cxx --prefix=/local/to/where/i/want/to/install --host=arm-none-linux-gnueabi和配置進展順利,與輸出以下存在部分:

 Version:   GNU MP 5.1.1 
     Host type:   arm-none-linux-gnueabi 
     ABI:    standard 
     Install prefix: /location/to/where/i/want/to/install 
     Compiler:   /prod/ndk/android_armeabi/bin/arm-linux-androideabi-gcc -- sysroot=/prod/ndk/android_armeabi/sysroot -std=gnu99 
     Static libraries: yes 
     Shared libraries: yes 

最多這裏順利,但是當我運行make,我收到以下錯誤:

ismpf.cc: In function 'std::istream& operator>>(std::istream&, mpf_ptr)': 
    ismpf.cc:48:43: error: 'struct lconv' has no member named 'decimal_point' 
    make[2]: *** [ismpf.lo] Error 1 
    make[2]: Leaving directory `~/Downloads/gmp-5.1.1/cxx' 
    make[1]: *** [all-recursive] Error 1 
    make[1]: Leaving directory `~/Downloads/gmp-5.1.1' 
    make: *** [all] Error 2 

所以我的第一個問題是存在的。有任何想法嗎?

出於好奇,我試着重新運行與上面相同的確切配置命令,但在它之前使用了sudo。幾秒鐘後,我收到了以下內容:

configure: error: Oops, mp_limb_t is 64 bits, but the assembler code 
    in this configuration expects 32 bits. 

有第二(即出現真正奇怪的問題)。

只是出於好奇,我試着重新啓動並清除所有我們創建的變量,並簡單地運行GMP手冊建議的命令: ./configure --prefix =/location/--enable-cxx - -host = arm-linux-androideabi

./configure運行時,make變好,但是當我做make check時,所有9/9測試失敗。任何人都可以指出我正確的方向與這些錯誤,或者有關如何嘗試和正確編譯Android的GMP?非常感謝任何幫助。

+0

您是否試過'./configure ABI = 32 -prefix =/location/--enable-cxx --host = arm-linux-androideabi'?可能有一些導致ABI參數等於64的錯誤... –

+0

確實如此,但它表示ABI = 32未被識別,並且它顯示了已識別選項的列表。該列表雖然只是「標準」。就是這樣,所以我要麼把ABI =標準的,要麼我什麼都不放。它仍然不起作用。 – shblsh

+0

你說9/9測試失敗了,但是你沒有命名這些測試或者說它們失敗了,這不是很有幫助。至於lconv問題,它是一個已知的android bug,它們不會修復AFAICS。有一天我們可能會在GMP中解決它,但我並不急於自己這樣做。只需在ismpf.cc中用'「。」'替換'localeconv() - > decimal_point'。 –

回答

0

取消設置CFLAGS env var解決了我的問題。