使用 mkbundle2 后,目标机器找不到 libmono.0.dylib
题
我有一个非常简单的 .NET 命令行应用程序,我想将其移植到 OS X。
我可以用“mono app.exe”运行它
但是,目标计算机不会安装单声道。所以,我想在应用程序中捆绑单声道。
为了做到这一点,我使用了 mkbundle2:
mkbundle2 -o bundledapp.exe app.exe --deps
这工作没有错误,输出:
OS is: Darwin
Sources: 1 Auto-dependencies: True
embedding: /Users/kclement/Projects/app/build/app.exe
embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/2.0/mscorlib.dll
embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/System/2.0.0.0__b77a5c561934e089/System.dll
embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/System.Security/2.0.0.0__b03f5f7f11d50a3a/System.Security.dll
embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/Mono.Security/2.0.0.0__0738eb9f132ed756/Mono.Security.dll
Compiling:
as -arch i386 -o temp.o temp.s
cc -g -o bundledapp.exe -Wall temp.c `pkg-config --cflags --libs mono` temp.o
Done
我可以在构建机器上执行它。然而,当我在没有单声道的机器上执行时,它不会运行。
输出:
dyld: Library not loaded: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/libmono.0.dylib
Referenced from: /Users/kristof/./bundledapp.exe
Reason: image not found
Trace/BPT trap
我缺少什么?如何包含实际的单声道运行时?
编辑:我还尝试添加 --static 标志。然而,这给了我的应用程序另一个许可证,我不确定我是否想要。然后我不再抱怨 libmono,而是抱怨 libgthread-2.0.0.dylib
解决方案
所以,问题是,mkbundle链接到一些文件驻留在我的Mac,在那里我预期他们捆绑。你可以清楚地看到,通过使用命令查找链接的资源:
otool -L ./BundledApp
(其中bundledApp是mkbundle2的输出)
为了解决这个问题,我结束了使用mkbundle楠任务从monobjc项目:点击 http://www.monobjc.net/index.php?page=mkbundle-任务
我觉得他们几乎什么我发现这里的自动版本:点击 http://code.google.com/p/cocoa-sharp-开发/维基/ RedistributableAppWithoutInstallingMono 结果 但是,这给了我的异常。
在Monobjc恶性任务工作没有任何问题,而且是目前为止最简单的解决方案。我仍然有多个文件,但没关系,至少现在的工作。
其他提示
尝试运行:
mkbundle -o bundledappname program.exe- deps
(为捆绑包使用不同的名称,而不是与您的程序.exe 相同的名称,并且不要将 .exe 扩展名添加到 -o 标志中)
另外,你尝试过吗 麦克包装 ?
有关如何创建捆绑包的更多信息,请阅读 这里 和 mkbundle 精美手册