crtbegin_so.o缺少android工具链(自定义构建)

dwe*_*ner 7 gcc android-ndk gdc

我使用android build-gcc.sh脚本与gcc一起编译了gdc,并在build/core/definitions.mk中包含了一个新的存根来处理D语言文件,作为构建过程的一部分.我知道事情正在编译好,但我的问题是链接:

当我构建项目时,我收到此错误:

ld: crtbegin_so.o: No such file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

对于常规的仅限c的项目也是如此.现在我在构建目录中运行了一个快速查找,发现文件(crtbegin_so.o)确实存在于我编译gcc时指定的sysroot中(或者更确切地说,当build-gcc.sh构建它时).

  • 有什么东西我可以寻找找到这个问题的解决方案?

  • 在本地复制文件并直接链接到它们是一个不错的解决方案吗?

  • 为什么ld(或collect2)会尝试将这些包含在gdc(D语言)链接中?

Sam*_*een 12

这个问题也出现在NDK r7c for linux上.

我发现工具链忽略了平台位置($ NDK_ROOT/platforms/android-8/arch-arm/usr/lib /)并在工具链路径中搜索它,这是不正确的.

但是,由于工具链还在当前目录中搜索文件,因此一种解决方案是将正确的平台crtbegin_so.o和crtend_so.o符号链接到源目录中:

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

因此你的第二点应该成功(你可以做一个符号链接,而不是副本)

注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"
Run Code Online (Sandbox Code Playgroud)


小智 5

我发现添加--sysroot=$(SYSROOT)到编译器选项可以修复错误:

无法打开crtbegin_so.o:没有这样的文件或目录

从我的makefile中...

CC= $(CROSS_COMPILE)gcc -fvisibility-hidded $(INC) $(LIB) -shared
Run Code Online (Sandbox Code Playgroud)

注意:这假设已运行setenv-android.sh来设置环境
$. ./setenv-android.sh