当前位置:   article > 正文

iPhone开发--Xcode中的ld64和-ld_classic是什么意思

-ld_classic

如下内容,翻译自官方论坛文档

文档地址如下:
https://developer.apple.com/forums/thread/715385

关键内容摘抄如下:

A static library is an archive of one or more object files. It has the extension .a. Use ar, libtool, and ranlib to inspect and
manipulate these archives. The static linker, or just the linker, runs
at build time. It combines various inputs into a single output.
Typically these inputs are object files, static libraries, dynamic
libraries, and various configuration items. The output is most
commonly a Mach-O image, although it’s also possible to output an
object file. The linker may also output metadata, such as a link map.
The linker has seen three major implementations:
ld — This dates from the dawn of Mac OS X.
ld64 — This was a rewrite started in the 2005 timeframe. Eventually it replaced ld completely. If you type ld, you get ld64.
ld_prime — This was introduced with Xcode 15. This isn’t a separate tool. Rather, ld now supports the -ld_classic and -ld_new options to select a specific implementation.
Note During the Xcode 15 beta cycle these options were -ld64 and -ld_prime. I continue to use
those names because the definition of new changes over time (some of
us still think of ld64 as the new linker ;–).

翻译

静态库是由一个或多个目标文件组成的存档,它使用 .a 作为文件扩展名。可以使用 ar、libtool 和 ranlib来检查和操作这些存档。

静态链接器(static linker),或者直接叫链接器(linker),在构建时运行。它将各种输入组合成一个输出。这些输入通常是对象文件、静态库、动态库以及各种配置项。输出最常见的是Mach-O 映像,不过也可以输出一个对象文件。链接器还可以输出元数据,例如link map。

链接器经历了三个主要实现:

ld —— 这可以追溯到 Mac OS X 开始的时期。

ld64 —— 这是一个 2005 年时段开始的重写。最终它完全取代了 ld。如果输入 ld,你获得的就是 ld64。

ld_prime —— 这是随着 Xcode 15 引入的。这不是一个单独的工具。相反,ld 现在支持 -ld_classic 和
-ld_new 选项来选择特定实现。

注意:在 Xcode 15 beta 阶段,这些选项是 -ld64 和-ld_prime。我继续使用这些名称,因为新旧的定义会随时间变化(我们中的一些人仍然认为 ld64 是新的链接器;-))。

引用知乎的文章:

在iOS应用程序开发中,Xcode是一款广泛使用的集成开发环境(IDE),而链接器是构建应用程序的关键组成部分之一。在Xcode中,我们常常会遇到两个重要的概念:ld64和-ld_classic。它们分别代表了默认链接器和经典链接器的选择。本文将详细介绍ld64和-ld_classic的含义、作用以及如何在Xcode中进行配置。

ld64和-ld_classic是什么?

ld64是Xcode中默认的链接器,用于进行应用程序的链接工作。链接器的作用是将多个目标文件和库文件组合成最终的可执行文件或动态库。ld64负责将编译后的目标文件以及依赖的库文件进行链接,生成可执行文件或动态库。-ld_classic是一种链接选项,用于指定使用经典链接器(Classic Linker)而不是默认的ld64。经典链接器是Xcode早期版本中使用的链接器,具有一些传统链接器的特性和限制。

-ld_classic的作用:

兼容性:对于一些旧的项目或第三方库可能仍然使用经典链接器进行链接的情况,可以使用-ld_classic选项以保持兼容性。这样,你可以继续在Xcode中使用这些项目或库,而无需进行修改。经典链接器可能具有一些特殊的功能或行为,适用于某些特定的项目。如果你的项目需要利用这些特性来满足需求,可以选择使用-ld_classic选项。需要注意的是,虽然经典链接器可能具有一些特殊之处,但它也存在一些限制和缺点。在大多数情况下,建议使用默认的ld64进行链接,因为它是Xcode的最新链接器,具有更好的性能和支持。

如何使用-ld_classic选项:

要在Xcode中使用-ld_classic选项,可以按照以下步骤进行配置:

打开你的Xcode项目。

在左侧导航栏中选择你的项目。

在右侧面板中选择“Build Settings”选项卡。

在搜索栏中输入“Other Linker Flags”。

在“Other Linker Flags”一栏中添加“-ld_classic”。

保存并重新构建你的项目。

通过适当配置Xcode的构建设置,你可以选择使用ld64或经典链接器进行链接,以满足项目的需求。这样,Xcode将使用指定的链接器进行链接工作。

经典链接器的限制:

虽然经典链接器具有一些优点,但也存在一些限制和缺点。以下是经典链接器的一些主要限制:

无法处理较大的代码库:经典链接器对于非常大的代码库可能存在性能瓶颈和限制。如果你的项目需要处理较大的代码库,建议使用默认的ld64进行链接。

无法处理动态库:经典链接器无法处理动态库,这意味着你无法将代码打包成动态库进行分发和使用。如果你需要创建动态库,必须使用默认的ld64进行链接。

兼容性问题:经典链接器可能不兼容一些新的编译技术和语言特性,这可能会导致一些编译错误和链接问题。如果你的项目需要使用最新的编译技术和语言特性,建议使用默认的ld64进行链接。

缺乏一些现代链接器的特性:经典链接器缺乏一些现代链接器的特性,如增量链接、快速链接等。这可能会影响链接速度和性能。如果你需要利用这些特性来提高链接性能和效率,建议使用默认的ld64进行链接。

如何选择适合的链接器:

在选择适合的链接器时,需要考虑以下因素:

如果你需要保持兼容性,可以使用-ld_classic选项来选择经典链接器进行链接。否则,建议使用默认的ld64进行链接。你的项目需要利用经典链接器的特性来满足需求,可以选择使用-ld_classic选项。否则,建议使用默认的ld64进行链接。如果你的代码库非常大,建议使用默认的ld64进行链接,以获得更好的性能和效率。如果你需要创建动态库,必须使用默认的ld64进行链接。

在iOS开发中,链接器是构建应用程序的重要组成部分之一。ld64是Xcode中默认的链接器,负责将编译后的目标文件和库文件进行链接。-ld_classic是一种链接选项,用于指定使用经典链接器而不是ld64进行链接。通过适当配置Xcode的构建设置,我们可以选择使用ld64或经典链接器进行链接,满足项目的需求。需要根据具体情况选择合适的链接器,并权衡其特性和限制。

原文链接:
https://zhuanlan.zhihu.com/p/680607560

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/276813
推荐阅读
相关标签
  

闽ICP备14008679号