我正在嘗試爲Android(arm)編譯GMP,但收到一個非常奇怪的錯誤。首先,我建立了一些東西所描述的另一個SO問題here:Android平臺的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?非常感謝任何幫助。
您是否試過'./configure ABI = 32 -prefix =/location/--enable-cxx --host = arm-linux-androideabi'?可能有一些導致ABI參數等於64的錯誤... –
確實如此,但它表示ABI = 32未被識別,並且它顯示了已識別選項的列表。該列表雖然只是「標準」。就是這樣,所以我要麼把ABI =標準的,要麼我什麼都不放。它仍然不起作用。 – shblsh
你說9/9測試失敗了,但是你沒有命名這些測試或者說它們失敗了,這不是很有幫助。至於lconv問題,它是一個已知的android bug,它們不會修復AFAICS。有一天我們可能會在GMP中解決它,但我並不急於自己這樣做。只需在ismpf.cc中用'「。」'替換'localeconv() - > decimal_point'。 –