使用zig作为链接器编译Cargo项目
项目描述
cargo-zigbuild
🚀 通过在GitHub上赞助我来帮助我成为全职开源开发者
使用zig作为链接器编译Cargo项目,以便于简化交叉编译。
安装
cargo install --locked cargo-zigbuild
您也可以使用pip安装它,这将自动安装ziglang
pip install cargo-zigbuild
我们还提供了一个Docker镜像,它预装了macOS SDK,包括cargo-zigbuild和Rust,例如用于构建x86_64 macOS
docker run --rm -it -v $(pwd):/io -w /io messense/cargo-zigbuild \
cargo zigbuild --release --target x86_64-apple-darwin
使用方法
- 按照官方文档安装zig,在macOS、Windows和Linux上,您也可以通过
pip3 install ziglang
从PyPI安装zig - 使用rustup安装Rust目标,例如,
rustup target add aarch64-unknown-linux-gnu
- 运行
cargo zigbuild
,例如,cargo zigbuild --target aarch64-unknown-linux-gnu
指定glibc版本
cargo zigbuild
支持在--target
选项中传递glibc版本,例如,使用aarch64-unknown-linux-gnu
目标编译glibc 2.17
cargo zigbuild --target aarch64-unknown-linux-gnu.2.17
[!NOTE] 使用glibc版本目标功能存在各种注意事项
- 如果您不提供
--target
,则Zig不会被使用,命令实际上运行了一个常规的cargo build
。- 如果您指定了无效的glibc版本,
cargo zigbuild
将不会传递来自zig cc
的关于选择回退版本的警告。- 此功能不一定匹配在构建主机上动态链接到特定版本的 glibc 的行为。
- 可以指定版本 2.32,但应在主机上只有 2.31 可用的情况下出错而不是运行。
- 同时,指定 2.33 将会在运行在 glibc 2.31 的主机上正确检测为不兼容。
- 某些
RUSTFLAGS
,如-C linker
,会禁用 Zig,而-L path/to/files
将使 Zig 忽略-C target-feature=+crt-static
。- 静态链接到 glibc 版本的
-C target-feature=+crt-static
不受支持(上游zig cc
缺乏支持)
macOS universal2 目标
cargo zigbuild
支持一个特殊的 universal2-apple-darwin
目标,用于在 Rust 1.64.0 及更高版本上构建 macOS universal2 二进制文件/库。
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
cargo zigbuild --target universal2-apple-darwin
注意
请注意,当前 Cargo
--message-format
选项与 universal2 目标不兼容。
注意事项
- 目前仅支持 Linux 和 macOS 目标,如果可以使其工作,可以添加其他目标平台,欢迎提交拉取请求。
- 仅在 CI 上定期测试当前的 Rust 稳定 和 夜间 版本,其他版本可能无法工作。
已知的上游 zig 问题
- zig cc:根据 clang 解析
-target
和-mcpu
/-march
/-mtune
标志:一些 Rust 目标不被zig cc
识别,例如armv7-unknown-linux-gnueabihf
,通过使用-mcpu=generic
并显式传递目标功能在 #58 - 在交叉编译时链接到 darwin 框架(如 CoreFoundation)的能力:将
SDKROOT
环境变量设置为 macOS SDK 路径以解决此问题 - zig 缺少一些
compiler_rt
函数,这可能导致某些目标出现未定义符号错误。另请参阅:[zig compiler-rt 状态](https://github.com/ziglang/zig/blob/master/lib/compiler_rt/README.md) - 不将 CPU 功能传递给 clang
许可证
此作品根据 MIT 许可证发布。许可文件的副本在 LICENSE 文件中提供。
项目详情
关闭
为 cargo_zigbuild-0.19.3-py3-none-win_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3a9fe2e2e650855ed309d252bfe76230f16011232c10ce616935e74e3cdb2a5e |
|
MD5 | 7a380bc13bc46ab390c45136e030b4cf |
|
BLAKE2b-256 | 0921558875d917297513b6049d2ea2e91633024fb88d563f2dadb527ee16667b |
关闭
为 cargo_zigbuild-0.19.3-py3-none-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dcb3fe77ea4a85a6b4c2ef11eb19d273ab3eed3dd2a4909b68dc530f002b39f7 |
|
MD5 | fcba16cd91f3c1f2b404f8e9fcfdfbe7 |
|
BLAKE2b-256 | 4cb523627b75298a54cfd8e67a05b1faa965362aa0961a2d50bb4c77cc0df40c |
关闭
为 cargo_zigbuild-0.19.3-py3-none-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 169ec405074eec3d53da8b58db07f816876ea3d83031eeab554ab65b72b16e2a |
|
MD5 | f5f07e3fe393dbad2a6b11923d88f35f |
|
BLAKE2b-256 | 67a39bface5111ced2c9b87a1d7a493bf0de26eb8c7478d4898b49631a416381 |
关闭
为 cargo_zigbuild-0.19.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c2ac2b6880451ef68df6ab231e3b65d338d545f90e0cf3a1d7d5fc7654802705 |
|
MD5 | 3c033c0b8e7de50bc3ce15a397812581 |
|
BLAKE2b-256 | 730fac1c23842230ddbb6f4328bf07a946f7802e2f09dab1bd3acfcdc2190aff |
关闭
为 cargo_zigbuild-0.19.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b3546b1cc0ffc7bd500505fc26ee3d4653be7649e277886125d939d94d4813e2 |
|
MD5 | 408b9e4b43a5ed3a014db8eadc5cc794 |
|
BLAKE2b-256 | d7d2fcf280daf7cc9a249417a53d3f2adf0ede975b6d127bfd4e970f380e31ed |
关闭
为 cargo_zigbuild-0.19.3-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ebbe8f3e6dc9feb1c735968fb6e20a7c7f7fe848d585d346b68180f1191c7932 |
|
MD5 | 63a4d53fa81bad73381603f4ac6c30e7 |
|
BLAKE2b-256 | 3eeea50e5f75a18fd1540faf3a8ea0e8c2a3613c629d395ea6269488f06e2655 |
关闭
为 cargo_zigbuild-0.19.3-py3-none-manylinux_2_5_i686.manylinux1_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c0f21971dff97b4034ee630205c566dd7e3b7e85ff59a62de71a669cdb620ca2 |
|
MD5 | 7839cd51d325895697db7ed79f6fa51f |
|
BLAKE2b-256 | 5555f1f0b42404449e4abaa21e3904108959e36e50c97b764936c4a23e9771e2 |
关闭
为 cargo_zigbuild-0.19.3-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 24775c112037168f9c608416e759e0dfb354ec2849ad25c479f4f9a70092a774 |
|
MD5 | e2f8ce76dd892951b6d97b875a1f65be |
|
BLAKE2b-256 | c721768eef12bb7c0700b28197c01944c70bf84224b0879c995c73694045319b |