Ubuntu 24.04构建zedless时rust-lld找不到已安装依赖库
问题原因
- 依赖安装不全:你之前的apt命令只安装了
libxkbcommon-dev和libasound2-dev,漏了libxkbcommon-x11-dev包,libxkbcommon-x11的库文件由这个独立包提供,系统里根本没有这个库的任何版本(不管动态还是静态)。 - 链接模式不匹配:你的构建配置开启了
-static-pie静态PIE编译,链接参数中-Wl,-Bstatic(静态链接标记)的生效范围覆盖了-lxkbcommon、-lxkbcommon-x11、-lasound三个库,此时rust-lld只会查找.a后缀的静态库文件,不会识别系统中已安装的.so格式动态库;如果对应开发包没有提供静态库版本,就会触发找不到库的报错。
修复步骤
- 第一步:安装全量构建依赖,不要只装零散的两个包,Ubuntu环境下编译zed/zedless需要的系统依赖如下:
apt update && apt install -y \ build-essential clang cmake curl git pkg-config \ libasound2-dev libfontconfig1-dev libfreetype6-dev libssl-dev \ libxcb-shape0-dev libxcb-xfixes0-dev libxcb-render0-dev libxcb-present-dev libxcb-xinput-dev libdrm-dev \ libxkbcommon-dev libxkbcommon-x11-dev
- 第二步:根据你的构建需求选择对应配置:
- 如果只是本地编译测试,不需要输出可移植的单文件静态程序:直接关闭静态链接选项即可。可以在编译时临时关闭静态相关的feature,或者修改项目内
.cargo/config.toml中的rustflags配置,删除-static-pie、-Wl,-Bstatic相关的静态链接参数,再执行编译。 - 如果需要输出静态PIE版本的可移植程序:执行
ls /usr/lib/x86_64-linux-gnu/ | grep -E "(libxkbcommon|libasound).*\.a"检查三个报错库的.a静态文件是否存在,哪个缺失就安装对应提供该静态文件的开发包即可。
- 如果只是本地编译测试,不需要输出可移植的单文件静态程序:直接关闭静态链接选项即可。可以在编译时临时关闭静态相关的feature,或者修改项目内
- 第三步:清理旧的构建缓存后重新编译,避免缓存的旧链接参数导致问题:
cargo clean cargo build --release
内容的提问来源于stack exchange,提问作者Pioneer_11
相关产品推荐
相关产品推荐

