Gcc android工具链缺少crtbegin_so.o(自定义构建)
我已经使用android build-gcc.sh脚本与gcc一起编译了gdc,并在build/core/definitions.mk中包含了一个新的存根,以作为构建过程的一部分处理D语言文件。我知道现在一切正常,但我的问题是链接: 当我构建项目时,会出现以下错误:Gcc android工具链缺少crtbegin_so.o(自定义构建),gcc,android-ndk,gdc,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 对于常规的c-only项目也是如此。现在,我在构建目录中运行了一个快速查找,发现文件(crtbegin_so.o
ld: crtbegin_so.o: No such file: No such file or directory
对于常规的c-only项目也是如此。现在,我在构建目录中运行了一个快速查找,发现文件(crtbegin_so.o)确实存在于我编译gcc(或者更确切地说,在build-gcc.sh构建它时)时指定的sysroot中
- 我可以找些什么来解决这个问题
- 在本地复制这些文件并直接链接到它们,这在将来是一个不错的解决方案吗 临时的
- 为什么ld(或collect2)会尝试将它们包含在gdc(D语言)链接中
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"
我在两个不同的案例中面临同样的问题:
独立工具链
问题消失,下面是准备独立工具链
$NDK_ROOT/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=android-toolchain --ndk-dir=$NDK_ROOT --system=darwin-x86_64 --toolchain=arm-linux-androideabi-4.9
特定于增压的
对于boost,您需要在jam
中多次指定--sysroot
<compileflags>--sysroot=$NDK_ROOT/platforms/android-9/arch-arm
<linkflags>--sysroot=$NDK_ROOT/platforms/android-9/arch-arm
--sysroot=$NDK_ROOT/platforms/android-9/arch arm
--sysroot=$NDK_ROOT/platforms/android-9/arch arm
我发现将--sysroot=$(sysroot)
添加到编译器选项可以修复错误:
无法打开crtbegin_so.o:没有这样的文件或目录
从我的makefile
CC= $(CROSS_COMPILE)gcc -fvisibility-hidded $(INC) $(LIB) -shared
注意:这假定已运行setenv-android.sh来设置环境$/setenv android.sh
在我的例子中,sysroot路径中缺少引号。
当我改变
--sysroot=${ANDROID_NDK}\platforms\android-17\arch-arm
到
该项目已成功编译并链接。为我解决了它:)这太棒了,谢谢!现在,我可以根据android工具链构建gdc。在VS2019中,由于这是链接器阶段的一部分,我需要将
--sysroot=“$(SysrootLink)”
添加到链接器命令行选项中
--sysroot="${ANDROID_NDK}\platforms\android-17\arch-arm"