Alpine Linux下构建Rust egui应用时链接器找不到xcb、xkbcommon等库
验证与修复Alpine Linux上Rust链接xcb/xkbcommon失败问题
验证链接器仅搜索/lib路径的猜想
- 查看ld默认搜索目录
执行命令:ld --verbose | grep SEARCH_DIR
输出会列出ld默认搜索的所有路径,直接检查列表中是否包含/usr/lib即可验证猜想是否成立。 - 手动模拟链接测试
执行命令模拟链接过程,查看库查找路径:ld -lxcb --verbose
如果输出仅显示尝试在/lib路径下查找libxcb.so,未出现/usr/lib路径的查找记录,即可确认链接器未搜索/usr/lib。
补充说明:除了路径问题,Alpine默认的运行时库包仅包含带版本号的.so文件(如
libxcb.so.1.1.0),链接阶段ld需要的无版本后缀的libxcb.so软链接默认存放在开发包中,这也是该问题的常见诱因。
修复链接问题
推荐优先使用方案1,可覆盖90%以上的同类场景
- 方案1:安装对应依赖的开发包
执行以下命令安装所有需要的开发包,会自动生成链接器需要的无版本号.so软链接,同时自动配置链接器搜索路径:apk add libxcb-dev xcb-util-renderutil-dev xcb-util-wm-dev libxkbcommon-dev
安装完成后重新执行cargo build即可。 - 方案2:临时/永久添加链接器搜索路径
如果确认是ld未搜索/usr/lib导致的问题,可通过Rust编译参数指定搜索路径:- 单次构建生效:执行命令
RUSTFLAGS="-L /usr/lib" cargo build - 永久对当前用户生效:编辑
~/.cargo/config.toml,添加如下配置:[build] rustflags = ["-L", "/usr/lib"]
- 单次构建生效:执行命令
- 方案3:手动创建软链接
也可以直接手动创建链接器需要的无版本号.so软链接:ln -s /usr/lib/libxcb.so.1.1.0 /usr/lib/libxcb.so ln -s /usr/lib/libxcb-render.so.0 /usr/lib/libxcb-render.so ln -s /usr/lib/libxcb-shape.so.0 /usr/lib/libxcb-shape.so ln -s /usr/lib/libxcb-xfixes.so.0 /usr/lib/libxcb-xfixes.so ln -s /usr/lib/libxkbcommon.so.0.0.0 /usr/lib/libxkbcommon.so
内容的提问来源于stack exchange,提问作者TobTobXX
相关产品推荐
相关产品推荐

