Ios 静态库中.h文件的意义是什么?
我是一个新的iOS开发者。我有一个基本的疑问。我在很多地方读到,我们需要将.h文件与静态库的.a文件一起发送 和.a文件是编译的库,具有整个实现,开发人员自己无法读取,只是为了保护实现者代码 我们需要.h文件来了解哪些公共函数可用。但是为什么Xcode不能解码一个文件并直接使用它,而不是发送另一个.h文件呢。Xcode不需要向开发人员显示.a实现,而是可以建议开发人员使用公开可用的方法Ios 静态库中.h文件的意义是什么?,ios,macos,static-libraries,Ios,Macos,Static Libraries,我是一个新的iOS开发者。我有一个基本的疑问。我在很多地方读到,我们需要将.h文件与静态库的.a文件一起发送 和.a文件是编译的库,具有整个实现,开发人员自己无法读取,只是为了保护实现者代码 我们需要.h文件来了解哪些公共函数可用。但是为什么Xcode不能解码一个文件并直接使用它,而不是发送另一个.h文件呢。Xcode不需要向开发人员显示.a实现,而是可以建议开发人员使用公开可用的方法 我看不出苹果没有这样做的任何逻辑原因。我确信,运送.h文件肯定有充分的理由。我想知道原因是什么?一个。一个文件
我看不出苹果没有这样做的任何逻辑原因。我确信,运送.h文件肯定有充分的理由。我想知道原因是什么?一个
。一个文件只是一个或多个.o
(对象)文件的存档。对象文件包含已编译的机器代码(针对特定CPU体系结构下的特定操作系统)。原始源代码“丢失”
您可能不知道的事实是:对象文件可以包含从任意编程语言编译的二进制文件。.h
文件特定于C/C++/Objective C。它包含能够使用函数/数据类型/…所需的数据类型和函数原型。。。以二进制形式包含在C/C++/Objective C中的对象文件中。例如,您可以编写Pascal库,将其编译为.a
文件,并使用适当的头文件(.h
)在您的Objective C程序中使用该代码
您也可以只有一个头文件(.h
文件),但例如6个不同的.a
文件:一个用于Mac OS X 64位
,一个用于Mac OS X 32位
,一个用于Linux 2.6 64位
,一个用于Linux 2.6 32位
,一个用于FreeBSD
,最后一个用于OpenBSD
最后但并非最不重要的一点是,并不是苹果公司决定这样做,.a
和.o
文件可以在(至少)任何类似Unix的操作系统上找到,头文件从第一天起就是C语言中的标准文件
通常,如果您将库从Mac移植到Linux,您可以使用(大部分)代码和头文件,但必须编译一个单独的。一个包含为Linux编译的目标文件的文件。一个。一个文件只是一个或多个.o
(对象)文件的存档。对象文件包含已编译的机器代码(针对特定CPU体系结构下的特定操作系统)。原始源代码“丢失”
您可能不知道的事实是:对象文件可以包含从任意编程语言编译的二进制文件。.h
文件特定于C/C++/Objective C。它包含能够使用函数/数据类型/…所需的数据类型和函数原型。。。以二进制形式包含在C/C++/Objective C中的对象文件中。例如,您可以编写Pascal库,将其编译为.a
文件,并使用适当的头文件(.h
)在您的Objective C程序中使用该代码
您也可以只有一个头文件(.h
文件),但例如6个不同的.a
文件:一个用于Mac OS X 64位
,一个用于Mac OS X 32位
,一个用于Linux 2.6 64位
,一个用于Linux 2.6 32位
,一个用于FreeBSD
,最后一个用于OpenBSD
最后但并非最不重要的一点是,并不是苹果公司决定这样做,.a
和.o
文件可以在(至少)任何类似Unix的操作系统上找到,头文件从第一天起就是C语言中的标准文件
通常,如果您将库从Mac移植到Linux,您可以使用(大部分)代码和头文件,但必须编译一个单独的.a
文件,其中包含为Linux编译的目标文件。.a
文件是编译后的.c
、.c++
、.m
等文件的集合。反编译这些文件只是为了获得函数的名称/签名a)基于道德/隐私的理由是不可靠的,b)需要大量的工作。.a
文件不是字节码或类似的易于反向工程的东西——它们是机器码
即使您确实对这些编译文件的“源代码”进行了反向工程,它们也不会包含实际的方法名称、签名或任何可识别的内容。.a
文件是编译的.c
、.c++
、.m
等文件的集合。反编译这些文件只是为了获得函数的名称/签名a)基于道德/隐私的理由是不可靠的,b)需要大量的工作。.a
文件不是字节码或类似的易于反向工程的东西——它们是机器码
即使您确实对这些编译文件的“源代码”进行了反向工程,它们也不会包含实际的方法名、签名或任何可识别的内容。感谢您的详细回复。但由于.a代码是特定于体系结构的,为什么编辑器不能读取.a文件,并向我们显示可用的公共函数,就像在执行期间一样,可执行文件能够链接静态库中所需的函数。那么为什么编辑不能这样做呢。这只是为了我的逻辑理解。从.o
文件中读取函数名非常简单(从.a
文件中读取函数名也非常简单),但是:您无法轻松知道函数的参数数量、类型和返回值!ABI(应用程序二进制接口)定义了如何处理参数,通常它们只是一个接一个地推送到堆栈上。.o
文件中的机器代码随后从那里加载数据。但这不可能总是逆向工程。谢谢你的详细回复。但仍然是。代码是归档的