1

我有一个非常简单的 .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

4

2 回答 2

1

所以,问题是 mkbundle 链接到我的 mac 上的某个文件,我希望它会在其中捆绑它们。通过使用以下命令查找链接的资源,您可以清楚地看到这一点:

otool -L ./BundledApp

(其中 bundledApp 是 mkbundle2 的输出)

为了修复它,我最终使用了来自 monobjc 项目的 mkbundle nant-tasks:
http ://www.monobjc.net/index.php?page=mkbundle-task

我认为它们几乎是我在这里找到的自动版本:
http
://code.google.com/p/cocoa-sharp-dev/wiki/RedistributableAppWithoutInstallingMono 但这给了我例外。

Monobjc nant 任务没有任何问题,并且是迄今为止最简单的解决方案。我仍然有多个文件,但没关系,至少现在可以使用。

于 2010-08-09T08:20:31.713 回答
0

尝试运行:

mkbundle -o bundledappname 程序.exe --deps

(为包使用不同的名称,而不是与您的 program.exe 相同的名称,并且不要将 .exe 扩展名放在 -o 标志中)

另外,你试过macpack吗?

有关如何创建捆绑包的更多信息,请阅读此处mkbundle 的精美手册

于 2010-08-05T15:57:10.767 回答