gpt4 book ai didi

c++ - 为什么链接 .a 文件需要 .o 文件 (Android Build)

转载 作者:行者123 更新时间:2023-11-30 04:02:35 24 4
gpt4 key购买 nike

这可能是一个特定于 Android 的问题,我不知道。

我有一个 .a 文件,它是构建的结果(具体来说是 V8 构建)。来自 here ,我认为 .a 文件是“文件”,因此包含目标文件中的相关位。因为我假设它们是存档,所以我将它们移到另一台机器上用于我的 Android 特定构建。但是,当我尝试构建 android native 库时,出现以下错误:

错误:无法打开/data/v8_3_26/out/android_arm.release/obj.target/v8_base.arm/src/api.o:没有那个文件或目录

如果我明确复制 .o 文件(并将它们放在上面显示的硬编码路径中),我的 Android 构建工作正常。所以我有几个问题。

  1. 这只是 Android 特有的东西,还是 .a 文件只是引用一般的 .o 文件?
  2. 我能否创建一个实际包含 .o 文件中相关位的 .a 文件?
  3. 如果不是,我真的必须将 .o 文件放在它们在构建机器上的相同位置,还是可以在链接步骤中指定?

1 .o files vs .a files

最佳答案

这实际上是 this question 的拷贝.不过,我会在这里提供更多信息。

根据 ar documentation , 存档文件(.a 文件)可以是正常的或精简的。在“瘦”的情况下,存档实际上并不包含存档文件的内容。

Instead, when a .a archive is a thin archive, it contains a symbol index and references to the original copies of the member files of the archive.

在 V8 构建的情况下,存档很薄,因此不包含目标文件。这就是当链接器运行时 ld 需要它们的原因。

关于c++ - 为什么链接 .a 文件需要 .o 文件 (Android Build),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25006333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com