我正在尝试使用NDK构建libgmp作为静态(共享也不起作用),我需要这个与nettle和gnutls链接。我在下面使用的版本:
所以我从他们的网站下载了libgmp的tar,然后是android standalong工具链:
$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
./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进行比较,唯一的区别是configure和x86 android工具链中的host参数。对于我的x86_64日志文件,你可以在这里阅读: https://pastebin.com/LLEbDz11
如果有人知道为什么二进制文件(比如gen-fibs)在为x86_64编译后没有运行(但是其他abi如x86和arm64)请告诉我。
提前致谢!!
答案 0 :(得分:0)
我发现二进制文件没有构建,因为它正在使用工具链的铿锵声。使用
export CC_FOR_BUILD=/usr/bin/gcc
使用linux中的gcc正确编译。