【问题标题】:Configuration error of the GMP library for the android platformandroid平台GMP库配置错误
【发布时间】:2013-06-05 20:21:35
【问题描述】:

我正在尝试为 android (arm) 编译 GMP,但收到一个非常奇怪的错误。首先,我按照另一个 SO 问题here 的描述设置了一些东西:

    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 测试都失败了。任何人都可以指出这些错误的正确方向,或者如何尝试并正确编译 GMP for android?非常感谢任何帮助。

【问题讨论】:

  • 你试过./configure ABI=32 -prefix=/location/ --enable-cxx --host=arm-linux-androideabi吗?可能有一些错误导致 ABI 参数等于 64...
  • 是的,我确实有,但它说 ABI=32 无法识别,它显示了一个已识别选项的列表。该列表虽然只是“标准”。就是这样,所以我要么放 ABI=standard,要么什么都不放。还是不行。
  • 您说 9/9 测试失败,但您没有说出这些测试的名称或说明它们是如何失败的,这不是很有帮助。至于 lconv 问题,这是 AFAICS 他们不会修复的已知 android 错误。有一天我们可能会在 GMP 中解决它,但我自己并不急于这样做。只需在 ismpf.cc 中将 localeconv()->decimal_point 替换为 "." 即可。
  • lconv 问题现已在 GMP 的开发版本(未来 5.2)中得到修复。

标签: android c++ android-ndk makefile gmp


【解决方案1】:

取消设置 CFLAGS env var 为我解决了这个问题。

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 2019-03-15
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多