我正在使用 mkbundle 并尝试创建一个使用 Isis2 的小程序 IdaTester 的嵌入式版本。该系统反过来使用依赖于 MonoPosixHelper 的 Mono 功能
我的问题是 mkbundle 无法识别依赖关系,我最终得到了一个仍然需要动态链接到 ~/bin/lib/libMonoPosixHelper.so 的可执行文件,当我将此可执行文件移动到我没有的系统时会导致问题安装了 Mono。实际上,bundle 缺少它应该静态链接的东西之一。
我的可执行文件确实有效,但前提是我确保仅在“正确位置”具有动态库的机器上运行它。这违背了嵌入式可执行文件的目的......我希望能够将这个程序作为一种服务器提供给人们,他们可以放在任何地方并作为二进制文件启动,显然如果他们需要安装库以使其工作,服务器并不完全独立!
我看到了如何强制 mkbundle 包含程序所依赖的任何 dll 文件,但 MonoPosixHelper 不作为 dll 存在;这是一个仅限 Linux 的库,仅作为共享库存在。有谁知道“强制”捆绑包静态嵌入它的方法?
如果这有帮助,我的小编译脚本如下:
mcs -debug+ IdaTester.cs Isis.cs -r:System.dll -r:Microsoft.CSharp.dll -r:Mono.Posix.dll
mkbundle --static -o IdaTester IdaTester.exe --deps
然后我运行 IdaTester;这适用于可以找到 libMonoPosixHelper 库的平台,但如果在未安装 libMonoPosixHelper 的平台上运行,则尝试动态加载该库时将在运行时失败...