我已经使用 android build-gcc.sh 脚本将 gdc 与 gcc 一起编译,并在 build/core/definitions.mk 中包含了一个新的 stub ,以作为构建过程的一部分来处理 D 语言文件。我知道此时一切正常,但我的问题是链接:
当我建立一个项目时,我得到这个错误:
ld: crtbegin_so.o: No such file: No such file or directory
对于常规的纯 c 项目也是如此。现在我在我的构建目录中快速查找,发现文件 (crtbegin_so.o) 确实存在于我在编译 gcc 时指定的 sysroot 中(或者更确切地说,当 build-gcc.sh 构建它时)。
临时?
最佳答案
该问题也出现在适用于 linux 的 NDK r7c 上。
发现工具链忽略了平台位置($NDK_ROOT/platforms/android-8/arch-arm/usr/lib/),在工具链路径中搜索,不正确。
但是,由于工具链也在当前目录中搜索文件,因此一种解决方案是将正确的平台 crtbegin_so.o 和 crtend_so.o 符号链接(symbolic link)到源目录中:cd src && ln -s NDK_ROOT/platforms/android-8/arch-arm/usr/lib/crtbegin_so.a
cd src && ln -s NDK_ROOT/platforms/android-8/arch-arm/usr/lib/crtend_so.a
因此,您的第二点应该可以解决(您可以在其中进行符号链接(symbolic link),而不是副本)
注意 1:这假设代码是使用 NDK 为 API8 (Android 2.2) 编译的。请根据您的要求将路径更改为正确的路径。
注 2:配置使用的标志:
./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
CPPFLAGS="-I$NDK_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$NDK_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$NDK_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"
关于gcc - android 工具链缺少 crtbegin_so.o(自定义构建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6881164/