【问题标题】:How does AOSP 9.0 build system link the executable?AOSP 9.0 构建系统如何链接可执行文件?
【发布时间】:2019-08-16 09:16:36
【问题描述】:

用AOSP 9.0.0_r30源码,先用这些命令输出一个 构建过程中的详细构建日志:

make clean
make showcommands -j8 > ~/BuildAndroid.txt

然后在~/BuildAndroid.txt 中搜索“lld”(全字匹配)。我什么也找不到。 Clang 链接器应该有 lld 关键字。搜索“ld”有 50 个结果,但它们几乎不是链接命令。其中一个是“ld.mc”,它是一个候选者。

然后搜索一些 cpp 源文件名,例如“TextDropShadowCache”。我只得到2个命令,都是clang++编译命令。

libhwui.so 的链接命令引用了一个文件“libhwui.so.rsp”,该文件似乎可能(只是猜测)包含“TextDropShadowCache.o”:

prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++ /OpenSource/Build/Android/9.0.0_r30/soong/.intermediates/bionic/libc/crtbegin_so/android_x86_64_core/crtbegin_so.o @/OpenSource/Build/Android/9.0.0_r30/soong/.intermediates/frameworks/base/libs/hwui/libhwui/android_x86_64_core_shared/libhwui.so.rsp ......

如果是真的,那么libhwui.so.rsp是怎么产生的?

该命令也引发了这个问题:What does @ mean in this clang command in AOSP build log?

根据上面的问题,@表示从文件中读取一个长命令,所以它很可能是一个列出所有libhwui.so需要的obj文件的文件。

所以问题基本得到解答,但未验证,因为 libhwui.so.rsp 似乎在构建后被删除。

AOSP 9.0 构建系统如何链接可执行文件?

【问题讨论】:

    标签: build android-source


    【解决方案1】:

    我找到了 pppd 的链接命令行,它只是使用

    prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++

    所有 .o/.a/.so 文件作为输入,pppd 作为输出。

    但这仍然不能解释为什么没有使用TextDropShadowCache.o作为输入的链接命令,也许他们使用一些脚本来读取多个.o文件?

    更新:一些链接命令,例如链接 libhwui.so 的命令使用 .rsp 文件将目标文件列表输入到链接器,因此命令行中没有目标文件列表。 .rsp 文件应该是包含列表的文本文件。

    【讨论】:

    • 您已经找到了一个让编译器调用链接器(仅,或者除了进行一些编译之外)而不是直接调用它的常见做法的示例(也许今天更常见)自己。
    • TextDropShadowCache.o 怎么样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多