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

标签 gcc android-ndk gdc

我已经使用 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 构建它时)。
  • 我可以寻找哪些东西来解决这个问题?
  • 在本地复制文件并直接链接到它们是一个不错的解决方案
    临时?
  • 为什么 ld(或 collect2)会尝试将这些包含在 gdc(D 语言)链接中?
  • 最佳答案

    该问题也出现在适用于 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.acd 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/

    相关文章:

    d - 标准D型和GDC(LDC)规范

    c - 海湾合作委员会警告: assignment makes integer from pointer without a cast

    c++ - 使用 GCC ARM Embedded 编译时代码大小加倍?

    c++ - 没有<>的模板方法实现

    Android gradle+CMake - 如何设置构建 worker 的数量

    android - Android 应用程序中 native cpp 函数的 UnsatisfiedLinkError (ndk)

    d - 使用gdc编译D程序时如何修复 "unrecognized option ' -plugin`"?

    gcc - Solaris ld : fatal: unrecognized option '--'

    android-ndk - 为arm处理器构建android adb

    iphone - 将多个异步调用放入队列中