龙空技术网

zig编程语言快速入门——5.6 与C语言互操作-cimport 链接 libc

南道 53

前言:

眼前兄弟们对“c语言链接文件”都比较关怀,同学们都需要知道一些“c语言链接文件”的相关内容。那么小编同时在网摘上汇集了一些有关“c语言链接文件””的相关资讯,希望你们能喜欢,大家快快来了解一下吧!

cImport

Zig@cImport内建程序很特别,因为它接收一个表达式,这个表达式只能接收@cInclude、@cDefine和@cUndef。它的工作原理与translate-c类似,将C代码翻译成Zig。

@cInclude接收一个路径字符串,可以将该路径添加到包含列表中。

@cDefine和@cUndef为导入的东西进行定义和取消定义。

这三个函数的工作方式与你期望它们在C代码中的工作方式完全一致。

与 @import 类似,它返回一个带有声明的结构类型。通常建议在一个应用程序中只使用一个@cImport的实例,以避免符号冲突;在一个cImport中生成的类型将不等同于在另一个中生成的类型。

cImport 仅在链接 libc 时可用。

链接 libc

链接 libc 可以通过命令行中的 -lc 来完成,或者通过 build.zig 使用 exe.linkLibC(); 来完成。使用的libc是编译目标的libc;Zig为许多目标提供libc .

Zig cc, Zig c++

Zig的可执行文件中嵌入了Clang,以及为其他操作系统和架构进行交叉编译所需的库和头文件。

这意味着,zig cc和zig c++不仅可以编译C和C++代码(与Clang兼容的参数),而且还可以在尊重Zig的目标三参数的情况下进行编译;你所安装的单个Zig二进制文件有能力为多个不同的目标进行编译,而无需安装多个版本的编译器或任何附加组件。使用zig cc和zig c++还可以利用Zig的缓存系统来加速你的工作流程.

使用Zig,人们可以很容易地为使用C和/或C++编译器的语言构建一个交叉编译工具链。

一些野外的例子:

使用zig cc将LuaJIT从x86_64-linux交叉编译到aarch64-linux使用zig cc和zig c++与cgo结合,将hugo从arch64-macos交叉编译到x86_64-linux,并进行完全静态链接

标签: #c语言链接文件