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

时间:2014-07-29 00:14:27

标签: c++ android-ndk

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

我有一个.a文件,它是构建的结果(V8构建是特定的)。从here,我认为.a文件是'档案',因此包含来自目标文件的相关位。由于我认为它们是档案,因此我将它们移动到另一台机器上以进行Android特定构建。但是,当我尝试构建一个Android本机库时,我收到以下错误:

错误:无法打开/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文件放在它们在构建机器上的相同位置,或者可以在链接步骤中指定它?
  4. 1 .o files vs .a files

1 个答案:

答案 0 :(得分:2)

这实际上是this question的副本。但是,我会在这里提供更多信息。

根据ar documentation,存档文件(.a文件)可以是正常的或精简的。对于' thin',档案实际上并不包含已归档文件的内容。

  

相反,当.a存档是精简存档时,它包含符号索引和对存档成员文件的原始副本的引用。

对于V8版本,存档很薄,因此不包含目标文件。这就是链接器运行时ld需要它们的原因。