网站首页 > 博客文章 正文
你可以通过 zig targets 命令获得可用的libc目标:
...
"libc": [
"aarch64_be-linux-gnu",
"aarch64_be-linux-musl",
"aarch64_be-windows-gnu",
"aarch64-linux-gnu",
"aarch64-linux-musl",
"aarch64-windows-gnu",
"armeb-linux-gnueabi",
"armeb-linux-gnueabihf",
"armeb-linux-musleabi",
"armeb-linux-musleabihf",
"armeb-windows-gnu",
"arm-linux-gnueabi",
"arm-linux-gnueabihf",
"arm-linux-musleabi",
"arm-linux-musleabihf",
"arm-windows-gnu",
"i386-linux-gnu",
"i386-linux-musl",
"i386-windows-gnu",
"mips64el-linux-gnuabi64",
"mips64el-linux-gnuabin32",
"mips64el-linux-musl",
"mips64-linux-gnuabi64",
"mips64-linux-gnuabin32",
"mips64-linux-musl",
"mipsel-linux-gnu",
"mipsel-linux-musl",
"mips-linux-gnu",
"mips-linux-musl",
"powerpc64le-linux-gnu",
"powerpc64le-linux-musl",
"powerpc64-linux-gnu",
"powerpc64-linux-musl",
"powerpc-linux-gnu",
"powerpc-linux-musl",
"riscv64-linux-gnu",
"riscv64-linux-musl",
"s390x-linux-gnu",
"s390x-linux-musl",
"sparc-linux-gnu",
"sparcv9-linux-gnu",
"wasm32-freestanding-musl",
"x86_64-linux-gnu",
"x86_64-linux-gnux32",
"x86_64-linux-musl",
"x86_64-windows-gnu"
],
这意味着在这些目标上使用--library c将不依赖任何系统文件!
让我们再看看C语言Hello, World例子:
$ zig build-exe hello.c --library c
$ ./hello
Hello world
$ ldd ./hello
linux-vdso.so.1 (0x00007ffd03dc9000)
libc.so.6 => /lib/libc.so.6 (0x00007fc4b62be000)
libm.so.6 => /lib/libm.so.6 (0x00007fc4b5f29000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fc4b5d0a000)
libdl.so.2 => /lib/libdl.so.2 (0x00007fc4b5b06000)
librt.so.1 => /lib/librt.so.1 (0x00007fc4b58fe000)
/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fc4b6672000)
glibc 不支持静态链接,但是 musl 支持:
$ zig build-exe hello.c --library c -target x86_64-linux-musl
$ ./hello
Hello world
$ ldd hello
not a dynamic executable
在这个例子中,Zig从源码构建musl libc然后将其链接到输出文件中。由于缓存系统,musl libc的缓存仍然有效,所以当再次需要这个libc的时候,它就会被立即使用。
这意味着这个功能可以在任何平台上使用。Windows和MacOS 用户可以为上面列出的任何目标构建Zig和C代码,并与libc链接。同样的代码也可以为其他架构交叉编译:
$ zig build-exe hello.c --library c -target aarch64-linux-gnu
$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 2.0.0, with debug_info, not stripped
在某些方面,Zig是比C编译器更好的C编译器!
这个功能不仅仅是将交叉编译工具链与Zig捆绑在一起。例如,Zig提供的libc头文件总大小为22MiB,未压缩。同时,仅 x86_64 上的musl libc+linux头文件就有8MiB,glibc有3.1 MiB(glibc 不包括Linux头文件),然而Zig目前附带的libc有40个。如果是天真的捆绑发布,那就是 444 MiB。然而,多亏了我做的这个 process_headers 工具,以及一些老式的手工劳动,Zig 二进制压缩包的总容量仍然只有 30 MiB,尽管它支持所有这些目标的 libc,以及compiler-rt、libunwind和libcxx,尽管它是一个Clang兼容的C编译器。作为比较,来自 llvm.org 的 clang 8.0.0 本身的 Windows二进制构建有132MiB这么大。
请注意,只有一级支持目标得到了彻底测试。我们有计划增加更多的 libc(包括Windows平台),并提高对所有libc的测试覆盖率。
我们还计划有一个 Zig 包管理器,但还没有完成。其中一个功能是可以为 C 库创建一个包,这将使 Zig 构建系统对 Zig 程序员和 C 程序员都有吸引力。
猜你喜欢
- 2024-09-17 Debian 11.7系统发布(debian最新版本)
- 2024-09-17 嵌入式开发(嵌入式开发用什么语言)
- 2024-09-17 Debian 11冻结开始 Debian 12将减少对i386支持
- 2024-09-17 软件更新丨Debian 10 "buster" 正式发布
- 2024-09-17 华硕路由器RT-AC1900P入手体验:整体性能没短板,但价格也不低!
- 2024-09-17 Debian宣布放弃其32位MIPS Little Endian“mipsel” 端口
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)