2010-08-05 45 views
1

我有一个非常简单的.NET命令行应用程序,我想要移植到OS X.
我可以使用“mono app.exe”运行它
但是,目标机器不会安装单声道。 所以,我想在应用程序中捆绑单声道。使用mkbundle2后,目标机器无法找到libmono.0.dylib

为了做到这一点,我用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

回答

1

所以,问题是,mkbundle指向驻留在我的Mac,在那里我预期他们捆绑了一些文件。你可以清楚地看到,通过使用命令查找链接的资源:

otool -L ./BundledApp 

(其中bundledApp是mkbundle2的输出)

为了解决这个问题,我结束了使用mkbundle楠任务从monobjc项目:
http://www.monobjc.net/index.php?page=mkbundle-task

我认为他们是非常的什么我发现这里的自动版本:
http://code.google.com/p/cocoa-sharp-dev/wiki/RedistributableAppWithoutInstallingMono
但是,这给了我的异常。

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

0

尝试运行:

mkbundle -o bundledappname的Program.exe --deps

(使用一个不同名称的软件包,而不是像你的program.exe一样,不要把.exe扩展名加到-o标志上)

另外,你是否试过macpack

有关如何创建包的更多信息,请阅读herethe fine manual of mkbundle

+0

更改输出名称似乎没有帮助。 我还没有尝试使用macpack,因为我认为只使用1个程序集的命令行应用程序不需要完整的程序包。 我会尝试,谢谢:) – kclement 2010-08-09 07:33:38

+0

我试过MacPack,它不能解决我的问题。 它创建一个包,但不会删除单声道依赖关系。 它确实给了我一个线索寻找什么,这是我发现monobjc nant任务,这给了我一个很好的解决方案,所以,谢谢:) – kclement 2010-08-09 08:22:06

相关问题