You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下Mono使用mkbundle无法找到共享库的问题

关于mkbundle打包时I18N.dll加载问题的解答

我来帮你拆解这个问题,把疑惑都讲清楚:

为什么必须使用-L参数?

mkbundle默认会尝试从mono的标准程序集路径和当前目录查找依赖程序集,但如果你的环境里,mono的系统级核心库(比如I18N.dll这类国际化基础库)所在路径没被mkbundle自动识别到,就会抛出找不到库的错误。

网上的示例之所以不用-L,大多是因为它们运行在标准配置的mono环境中:要么mono安装在系统默认路径,要么MONO_PATH环境变量已经正确指向了系统程序集目录,mkbundle能自动定位到这些核心库,自然不用手动指定路径。而你的环境里mkbundle没法自动找到这些库的位置,所以必须通过-L参数手动告知搜索目录。

什么是Custom mode?

从错误提示来看,当mkbundle无法自动检测到mono的默认程序集搜索路径时,就会进入Custom mode(自定义模式)。触发这个模式的常见原因有:

  • mono安装路径不是系统默认位置
  • MONO_PATH环境变量未正确设置,导致mkbundle不知道去哪找mono的核心程序集
  • 系统存在多个mono版本,mkbundle默认关联的版本和你编译程序用的版本不一致

在Custom mode下,mkbundle只会搜索当前目录(.),所以找不到系统级的I18N.dll,必须手动用-L指定搜索目录。

如何通过环境变量解决这个问题?

你可以设置MONO_PATH环境变量,让mkbundle自动定位到mono核心程序集,不用每次都加-L参数:

  1. 先找到你系统中I18N.dll所在的具体目录,比如你提到的/usr/lib/mono/[对应版本号]/(例如/usr/lib/mono/6.0/)
  2. 在终端临时设置环境变量:
    export MONO_PATH=/usr/lib/mono/[你的版本号]/
    
  3. 若要永久生效,把上面的命令添加到你的shell配置文件里(比如~/.bashrc或~/.zshrc),保存后重新打开终端或执行source ~/.bashrc即可生效。

这样配置后,mkbundle就能自动找到系统级依赖库,后续打包就不用手动指定-L了。

内容的提问来源于stack exchange,提问作者Turysaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:02:50