首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新版本的xcode是否支持为链接添加静态库的跨项目引用?

问新版本的xcode是否支持为链接添加静态库的跨项目引用?
EN

Stack Overflow用户
提问于 2013-06-28 12:19:16
回答 1查看 397关注 0票数 2

我在I中看到了一些静态库项目,我看到了两种不同类型的链接静态库。

A)将.a静态库添加到新的xcode工程及其头文件中,only.It表示通用静态库。

B)将.a静态库添加到新的xcode工程中,将静态库有created.this的xcode工程添加为跨项目引用?示例:adding cocos2d to xcode 3.2

当我从第二个项目中删除创建静态库的xcode项目时,它给出了错误。我尝试了第一种方法来获取第二个one.But,但它不起作用。

1)您能解释一下为什么会有不同吗?它会因我们使用的xcode版本而不同吗?第二种方法适用于旧的xcode版本吗?

2) xcode 4.3等最新版本是否支持跨项目引用?如果支持,哪种方法更好?这两种方法之间有什么不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-03 16:43:46

让我先大致解释一下什么是.a文件和框架。在Cocoa中,您可以将类写入.m文件,每个文件的类或多或少都是如此。在编译项目时,编译器逐个处理每个.m文件,并生成源代码的二进制表示(机器码)以及一些头信息,如对象方法的列表和偏移量。结果是每个.m源代码文件对应一个.o目标文件。现在,如果您链接的是静态库,那么所有这些对象文件都被打包到一个用于给定平台的.a归档文件中:用于模拟器的i386、用于设备的armv7和armv7s。要使用这些归档文件,您还需要公开SDK的头文件(即使可以从归档文件中提取相同的信息)。对于要支持的每个体系结构,.framework捆绑包只是一组这些.a文件,再加上公共头文件,可以说它们很好地打包成了一个捆绑包。由于链接是“静态”的,因此在链接最终可执行文件时,将从.a文件中提取.o文件,并将其复制到最终可执行文件的二进制文件中。

一些静态库提供商不想向第三方开发人员透露他们的库的源代码,因此只发布.a二进制文件。这类库的示例是Facebook或Aviary SDK。将.a文件添加到项目中时,实际上是添加了编译对象的二进制表示形式。由于您还可以访问这些头文件,因此即使您无法访问源代码,也仍然可以使用这些二进制文件。

当您使用嵌入式项目时,您可以访问该库的源代码。在这种情况下,XCode将首先编译您的嵌入式项目,再次生成.o,然后从原始的.m源代码文件生成.a文件。然后,它开始编译您的应用程序,该应用程序声明它对库的.a文件的依赖性,因为这次是现成的,因为它是几秒钟前由XCode编译的。所以链接成功了。另一方面,当您删除嵌入式项目时,它不仅会删除源代码文件,还会删除生成的.a文件,因此最终应用程序的链接将失败。

从最终二进制文件的角度来看,无论您使用预编译的.a文件还是嵌入式项目,都没有区别,相同的.o文件最终将出现在最终的二进制文件中,只是在第一种情况下,它们是由库的提供者编译的,而在第二种情况下,它们是由您编译的。即使您有权访问源代码,使用.a文件的唯一好处是它的编译时间稍快一些。缺点是调试器需要额外的配置才能进入库的源代码。

无论如何,如果你想删除嵌入的项目,你可以这样做。将库作为静态库编译一次,然后在目标目录中搜索生成的.a文件。将每个架构的.a文件复制到应用程序的项目文件夹中,并将它们与公共头文件一起添加到项目中,然后编译最终的应用程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17357111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档