为 Linux 构建 Zed
仓库
克隆 Zed 仓库。
依赖项
-
安装 rustup
-
安装必要的系统库
script/linux如果您喜欢手动安装系统库,可以在
script/linux文件中找到所需软件包的列表。
后端依赖项(可选)
如果您希望使用本地协作服务器开发 Zed 协作功能,请参阅:本地协作 文档。
链接器
在 Linux 上,Rust 的默认链接器是 LLVM 的 lld。替代链接器,特别是 Wild 和 Mold,可以显著提高首次构建和增量构建的时间。
目前 Zed 在 CI 中使用 Mold,因为它更成熟。对于本地开发,推荐使用 Wild,因为它比 Mold 快 5-20%。
这些链接器可以通过 script/install-mold 和 script/install-wild 安装。
要将 Wild 设置为默认链接器,请将以下行添加到您的 ~/.cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=--ld-path=wild"]
[target.aarch64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=--ld-path=wild"]
要将 Mold 设置为默认链接器
[target.'cfg(target_os = "linux")']
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
从源代码构建
安装依赖项后,您可以使用 Cargo 构建 Zed。
用于编辑器的调试构建
cargo run
并运行测试
cargo test --workspace
在发布模式下,主要用户界面是 cli crate。您可以在开发环境中运行它:
cargo run -p cli
安装开发版本
您可以使用以下命令在您的机器上安装本地构建:
./script/install-linux
这将在发布模式下构建 zed 和 cli,并将它们提供给 ~/.local/bin/zed,并将 .desktop 文件安装到 ~/.local/share。
注意:如果您遇到类似以下的链接器错误:
error: linking with `cc` failed: exit status: 1 ... = note: /usr/bin/ld: /tmp/rustcISMaod/libaws_lc_sys-79f08eb6d32e546e.rlib(f8e4fd781484bd36-bcm.o): in function `aws_lc_0_25_0_handle_cpu_env': /aws-lc/crypto/fipsmodule/cpucap/cpu_intel.c:(.text.aws_lc_0_25_0_handle_cpu_env+0x63): undefined reference to `__isoc23_sscanf' /usr/bin/ld: /tmp/rustcISMaod/libaws_lc_sys-79f08eb6d32e546e.rlib(f8e4fd781484bd36-bcm.o): in function `pkey_rsa_ctrl_str': /aws-lc/crypto/fipsmodule/evp/p_rsa.c:741:(.text.pkey_rsa_ctrl_str+0x20d): undefined reference to `__isoc23_strtol' /usr/bin/ld: /aws-lc/crypto/fipsmodule/evp/p_rsa.c:752:(.text.pkey_rsa_ctrl_str+0x258): undefined reference to `__isoc23_strtol' collect2: error: ld returned 1 exit status = note: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified = note: use the `-l` flag to specify native libraries to link = note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.net.cn/cargo/reference/build-scripts.html#rustc-link-lib) error: could not compile `remote_server` (bin "remote_server") due to 1 previous error原因:这是由 aws-lc-rs 的已知错误引起的(不支持 GCC >= 14):FIPS 无法使用 GCC >= 14 构建 和 GCC-14 - FIPS 模块构建失败
您可以参考 linux: 使用 script/install-linux 时远程服务器的链接器错误 以获取更多信息。
解决方法:将远程服务器目标设置为
x86_64-unknown-linux-gnu,例如export REMOTE_SERVER_TARGET=x86_64-unknown-linux-gnu; script/install-linux
Wayland & X11
Zed 同时支持 X11 和 Wayland。默认情况下,我们会在运行时选择任何一个可用的。如果您在 Wayland 上并希望以 X11 模式运行,请使用环境变量 WAYLAND_DISPLAY=''。
打包 Zed 的注意事项
感谢您承担打包 Zed 的任务!
技术要求
Zed 有两个主要的二进制文件
- 您需要构建
crates/cli并使其二进制文件以zed的名称在$PATH中可用。 - 您需要构建
crates/zed并将其放置在$PATH/to/cli/../../libexec/zed-editor。例如,如果您要将 cli 放置在~/.local/bin/zed,则将 zed 放置在~/.local/libexec/zed-editor。由于某些 Linux 发行版(特别是 Arch)不鼓励使用libexec,您也可以将此二进制文件放置在$PATH/to/cli/../../lib/zed/zed-editor(例如~/.local/lib/zed/zed-editor)中。 - 如果您要提供
.desktop文件,可以在crates/zed/resources/zed.desktop.in中找到模板,并使用envsubst填充所需的值。此文件还应重命名为$APP_ID.desktop,以便该文件遵循 FreeDesktop 标准。您还应该使此桌面文件可执行 (chmod 755)。 - 您需要确保安装了必要的库。您可以通过检查系统上构建的二进制文件来获取当前列表。
- 有关完整构建脚本的示例,请参阅 script/bundle-linux。
- 您可以通过使用环境变量
ZED_UPDATE_EXPLANATION构建(或运行)Zed 来禁用 Zed 的自动更新,并为尝试手动更新 Zed 的用户提供说明。例如:ZED_UPDATE_EXPLANATION="请使用 flatpak 更新 zed。"。 - 确保将
crates/zed/RELEASE_CHANNEL文件的内容更新为 'nightly'、'preview' 或 'stable',且不带换行符。这将使 Zed 使用凭据管理器记住用户的登录信息。
其他注意事项
在 Zed,我们的首要任务是快速发展并为用户带来最新技术。我们长期以来一直对速度慢、过时或难以配置的软件感到沮丧,因此我们根据这些偏好构建了我们的编辑器。
然而,我们意识到许多发行版有其他优先事项。我们希望与所有人合作,将 Zed 带到他们喜欢的平台。但这还有很长的路要走。
- Zed 是一个快速发展中的早期项目。我们通常每周发布 2-3 个版本,以修复用户报告的问题并发布主要功能。
- Linux 系统上可能存在其他几个
zed二进制文件(1、2)。如果您因为这些问题想要重命名我们的 CLI 二进制文件,我们建议使用zedit、zeditor或zed-cli。 - Zed 自动安装正确版本的常见开发工具,就像 rustup/rbenv/pyenv 等一样。我们理解这有争议,请参阅此处。
- 我们允许用户从 zed-industries/extensions 本地安装扩展。这些扩展可能会根据需要安装进一步的工具,例如语言服务器。从长远来看,我们希望使其更安全,请参阅此处。
- Zed 默认连接到多个在线服务(AI、遥测、协作)。AI 和我们的遥测可以通过用户的 Zed 设置或修补我们的默认设置文件来禁用。
- 由于上述问题,zed 目前与沙盒不兼容,请参阅此处。
Flatpak
Zed 当前的 Flatpak 集成在启动时会退出沙盒。依赖 Flatpak 沙盒的工作流程可能无法按预期工作。
要在本地构建和安装 Flatpak 包,请按照以下步骤操作:
- 按照此处的说明为您的发行版安装 Flatpak。
- 运行
script/flatpak/deps脚本以安装所需的依赖项。 - 运行
script/flatpak/bundle-flatpak。 - 现在,软件包已安装,并在
target/release/{app-id}.flatpak处提供了一个包。
内存分析
heaptrack 对于诊断内存泄漏非常有用。要安装它:
$ sudo apt install heaptrack heaptrack-gui
$ cargo install cargo-heaptrack
然后,构建并运行 Zed,并附加分析器:
$ cargo heaptrack -b zed
当这个 zed 实例退出时,终端输出将包含一个运行 heaptrack_interpret 的命令,用于将 *.raw.zst 分析文件转换为 *.zst 文件,该文件可以传递给 heaptrack_gui 进行查看。
故障排除
Cargo 错误声称某个依赖项正在使用不稳定功能
尝试 cargo clean 和 cargo build。