gpt4 book ai didi

android - x86_64 的 Libgmp NDK 构建问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:39 24 4
gpt4 key购买 nike

我正在尝试将 NDK 构建为静态的 libgmp(共享也不起作用),我需要它来链接 nettle 和 gnutls。我使用的版本如下:

  • GMP:6.1.2
  • NDK:r16b
  • 目标:x86_64
  • 应用程序接口(interface):android-27
  • 环境:Ubuntu 16.04(Windows 外壳)

所以我从他们的网站下载了 libgmp 的 tar,然后是 android 独立工具链:

$NDK/build/tools/make_standalone_toolchain.py --arch "x86_64" --api 27 \
--stl=libc++ --install-dir /tmp/android-toolchain --force

设置环境与NDK链接

     # Prefix is out the output folder location
PREBUILT=/tmp/android-toolchain
CROSS_COMPILE=$PREBUILT/bin/x86_64-
CFLAGS="-isystem /tmp/android-toolchain/sysroot/usr/include/x86_64/ -D__ANDROID_API__=27-I$PREFIX/include"

export LDFLAGS="-Wl,-rpath-link=/tmp/android-toolchain/sysroot/usr/lib -L$/tmp/android-toolchain/sysroot/usr/lib -lc -lm -ldl -llog -nostdlib -lgcc -L$PREFIX/lib"
export CPPFLAGS="$CFLAGS"
export CFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS"
export CXX="clang++"
export AS="clang"
export CC="clang"
export NM="${CROSS_COMPILE}nm"
export STRIP="${CROSS_COMPILE}strip"
export RANLIB="${CROSS_COMPILE}ranlib"
export AR="${CROSS_COMPILE}ar"
export LD="${CROSS_COMPILE}ld"

然后运行配置

./configure 
--prefix=$PREFIX \
--host="x86_64-linux" \
--build=x86_64-unknown-linux-gnu \
--disable-dependency-tracking \
--enable-static \
--disable-shared \
|| exit 1

make -j4 || exit 1

前缀指向输出目录,(也试过主机 x86_64-linux-android)。它会进行配置,但之后运行 make 时,它​​会尝试编译一堆二进制文件,这些二进制文件会自动创建一堆文件,例如 gen-fib.c -> gen-fib 二进制。

Makefile 然后运行该二进制文件以创建头文件 (fib_table.h) 和源文件 fib_table.c。当 Makefile 运行时(我相信是这样的)

gen-fib header <number> <number> > fib_table.h

它什么都不输出,所以 fib_table.h 是空的(0 字节)。我试图从命令行运行它,但什么也没有出现。试图在 gen-fib.c 中创建一个文件并将其编译为创建一个虚拟文件,但没有任何反应。二进制文件不执行任何操作,根本不运行!

现在我已经用 arm64(aarch64 或 arm64-v8a)和 x86 成功编译了它(当然在不同主机之间运行了 make distclean)。我尝试将 config.log 与 x86 和 x86_64 进行比较,唯一的区别是配置和 x86 android 工具链中的主机参数。对于我的 x86_64 日志文件,您可以在此处阅读: https://pastebin.com/LLEbDz11

如果有人知道为什么二进制文件(如 gen-fibs)在为 x86_64(但其他 abi,​​如 x86 和 arm64)编译后不运行,请告诉我。

提前致谢!

最佳答案

我发现二进制文件没有构建,因为它使用了工具链的 clang。使用

 export CC_FOR_BUILD=/usr/bin/gcc

使用 linux 的 gcc 编译正确。

关于android - x86_64 的 Libgmp NDK 构建问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48518335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com