我是一名新的iOS开发人员。我有一个非常基本的怀疑。我在许多地方读过,我们需要发送.h文件以及静态库的.a文件。
而.a文件是编译库,具有完整的实现,开发人员无法自行阅读,只是为了安全保护实现者代码。
我们需要.h文件才能知道哪些公共功能可用。但是为什么Xcode不能解码.a文件并直接使用它而不是发送另一个.h文件。 Xcode不需要向开发人员展示.a实现,而是可以向开发人员提供公开可用的方法。
我没有看到苹果没有这样做的任何合乎逻辑的理由。我相信运送.h文件肯定有充分理由。我想知道可能是什么原因?
答案 0 :(得分:5)
.a
文件只是一个或多个.o
(对象)文件的存档。目标文件包含已编译的机器代码(针对特定CPU体系结构下的一个特定操作系统)。原始源代码是"丢失"。
您可能不知道的事实:目标文件可以包含从任意编程语言编译的二进制文件。 .h
文件是特定于C / C ++ / Objective C的。它包含您需要能够在C / C ++ / Objective C中的目标文件中使用二进制形式的函数/数据类型/ ...所需的数据类型和函数原型。编写一个Pascal库,将其编译为.a
文件,并使用适当的头文件(.h
)在Objective C程序中使用该代码。
您也可以只有一个头文件(.h
文件),但例如6个不同的.a
个文件:一个为Mac OS X 64bit
编译,一个用于Mac OS X 32bit
,一个用于Linux 2.6 64bit
,一个用于Linux 2.6 32bit
,一个用于FreeBSD
和OpenBSD
的最后一个。
最后但并非最不重要的是,Apple决定采用这种方式,.a
和.o
文件可以在(至少)任何类Unix操作系统上找到从头几天开始,头文件就是C中的标准。
通常,如果您将库从Mac移植到Linux,您可以使用(大部分)代码和头文件,但必须编译一个单独的.a
文件,其中包含为Linux编译的目标文件。
答案 1 :(得分:0)
.a
个文件是已编译的.c
,.c++
,.m
等文件的集合。为了获得功能的名称/签名而对这些文件进行分解会a)在道德/隐私方面变得狡猾,并且b)需要做很多工作。 .a
文件不是字节代码或类似的易于逆向工程的东西 - 它们是机器代码。
即使您对这些编译文件中的“源”进行了反向工程,它们也不会包含实际的方法名称,签名或任何可识别的内容。