Ubuntu下Bevy Release可执行文件运行失败:缺失libbevy_dylib
解决Bevy项目Release构建后动态链接库缺失问题
问题原因
Bevy默认在Linux平台下启用dynamic_linking特性,会将核心库编译为动态链接库(libbevy_dylib-*.so),导致生成的可执行文件运行时依赖该动态库,分发时容易出现找不到文件的错误。
解决方案
1. 修改Cargo.toml禁用动态链接特性
打开项目根目录的Cargo.toml,修改bevy依赖配置:禁用默认特性(默认包含dynamic_linking),手动启用项目需要的特性并添加static_linking支持:
[dependencies] bevy = { version = "0.14", default-features = false, features = [ # 基础核心特性 "bevy_core", "bevy_app", "bevy_ecs", # 根据项目需求选择,比如2D开发需添加: "bevy_2d", "bevy_sprite", "bevy_ui", # 其他常用特性 "bevy_window", "bevy_input", "bevy_asset", "bevy_render", "bevy_scene", # 启用静态链接支持 "static_linking", ] } mo_editor = { path = "crates/mo_editor" } mo_std = { path = "crates/mo_std" }
若不确定需要哪些特性,可参考Bevy默认特性列表,仅排除
dynamic_linking即可。默认特性包含bevy_render、bevy_sprite、bevy_ui等常用功能。
2. (可选)配置完全静态链接系统库
如果需要生成完全不依赖系统共享库的可执行文件,修改config.toml中Linux目标的配置:
[target.x86_64-unknown-linux-gnu] linker = "clang" rustflags = [ "-Clink-arg=-fuse-ld=lld", "-C target-feature=+crt-static", # 静态链接C标准库 ]
执行此配置前,需确保Ubuntu系统安装了静态系统库,可通过以下命令安装:
sudo apt install libc6-dev libstdc++-dev
3. 重新构建并验证
执行Release构建命令:
cargo build --release
构建完成后,用ldd检查可执行文件依赖:
ldd target/release/BevyPractice
若输出中无libbevy_dylib-*.so,说明配置成功;完全静态链接的可执行文件会显示not a dynamic executable。
此时生成的可执行文件可直接分发,无需附带额外动态库。
内容的提问来源于stack exchange,提问作者monok
相关产品推荐
相关产品推荐

