Tag: C库

使用和创建C静态库

随着C程序的发展,您开始具有许多不同的功能。 这会变得凌乱! 当需要在编译过程中进行链接时,计算机将不得不处理许多目标文件,这使其效率低下。 减少总时间并提高效率的一种方法是利用C库。 AC库包含可链接并用于执行特定任务的功能列表。 无需调用许多不同的文件,您可以引用单个库。 使用此方法将优化编译过程,其原因有两个: 1)由于C库已建立索引,因此很容易找到所需和应链接的符号,例如函数和变量。 2)C库将所有功能放在一个位置,从而在链接过程中打开的文件较少。 UNIX系统允许我们创建2种C库。 静态和共享 。 (在此博客文章中,我将只讨论静态库) 静态库是直接链接到可执行文件中的函数的集合(如前所述)。 因此,当需要运行该文件时,您只需要一个文件。 之所以称其为“静态”,是因为可执行文件现在将保持不变,除非您要操纵该库并重新对其进行编译。 要创建静态库,您想使用2个命令。 第一个是: ar命令是“ archiver”的缩写,它用于创建静态库“ sonialib.a”。该命令后的* .o仅指示该库中应包含当前工作目录中的所有.o文件。 在ar之后添加的c标志告诉它创建库,无论它是否存在。 然后, r标志告诉它用新的替换旧的目标文件。 创建存档后,便需要对库进行索引。 这是使用ranlib命令完成的: 创建存档后,您现在可以在程序中使用它了。 如前所述,要使用库,您需要在编译期间将其链接。 此命令行将编译您的c文件,并使用sonialib中找到的所有必要符号。 –L。 标志告诉链接器,可以在任何给定目录中找到sonialib。 在编译过程中,使用静态库是更有效的选择,因为所有目标文件都直接放置在可执行文件中。 但是,如果您要对程序进行更改,那么它通常会被认为是效率低下的库,因为每次更改时都必须重新编译和链接文件。

在Swift项目中设置C库依赖关系(第1/2部分)

可以很简单。 建立C库依赖关系的一种简单方法是在Xcode中建立一个快速项目时使用公共标头。 第一步:创建一个快速项目 Xcode->新建->项目->可可触摸框架->语言:Swift->下一步。 我将项目命名为CDependencyTutorial 。 第二步:设置项目依赖项 我有一个名为ExampleCLibrary的静态C框架。 将ExampleCLibrary.xcodeproj拖到CDependencyTutorial项目中。 第三步:调整一些项目设置 选择目标CDependencyTutorial- > general- >链接的框架和库-> Add libExampleCLibrary.a 。 转到构建阶段->标头->将ExampleCLibrary.h拖到Public中。 转到CDependencyTutorial.h ,添加 要下载该项目吗? 点击这里。 如果您想知道我是如何解决此问题的,请查看第2部分。您是Twitter用户,想与我讨论吗? 我的推特:@humlelu。

在Swift项目中设置C库依赖关系(第2/2部分)

选项2:使用模块映射 T L; DR 第1部分 描述了如何使用公共标头在Swift项目中设置C库依赖项。 设置C库依赖项的更整洁的方法是使用模块映射。 第一步:创建一个快速项目 Xcode->新建->项目->可可触摸框架->语言:Swift->下一步。 我将项目命名为CDependencyTutorial2 。 第二步:设置项目依赖项 我有一个名为ExampleCLibrary的静态C框架。 将ExampleCLibrary.xcodeproj拖到CDependencyTutorial2项目中。 第三步:将C库设置为子模块 选择目标CDependencyTutorial2- >常规->链接的框架和库->添加libExampleCLibrary.a 。 转到CDependencyTutorial2项目的目录,创建一个文件夹,我将其称为CWrapper,在该文件夹内,创建一个文件,并将其称为module.modulemap 。 该路径应该是您的 C标头的路径。 选择目标CDependencyTutorial2- >构建设置->导入路径 ->在modulemap的目录中键入。 对我来说是: 第四步:现在在swift项目中使用它。 选择CDependencyTutorial2项目,添加一个新的swift文件。 让我们写一些代码。 randomString是C库中的一个函数,现在可以在Swift中识别。 是的,😀成功! 简介:为了能够在Swift项目中使用C库,主要有两个步骤:在文件夹中创建module.modulemap , 导入路径应指向模块映射目录。 在第1部分中,如果我使用public标头方法,则C标头也将公开。 使用这种方法,我们就没有这个问题。 我对这种解决方案感到非常满意。 😀 您是否要下载项目? 请点击这里。 所以你怎么看? 想和我讨论吗? 这是我的推特:@humlelu。