首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mkbundle和GTK#

mkbundle和GTK#
EN

Stack Overflow用户
提问于 2011-09-05 12:25:51
回答 2查看 2.1K关注 0票数 0

我试图使用mkbundle,这样我就可以分发一个GTK#应用程序,而不需要用户安装.NET/Mono或GTK#。我已经成功地捆绑了一个使用winforms的应用程序,但由于某种原因,当我对GTK#应用程序进行同样的处理时,它将无法工作。

这就是我从cygwin那里得到的东西:

$ mkbundle --deps a.exe OS is: Windows Sources: 1 Auto-dependencies: True

未处理的异常: System.IO.FileNotFoundException:无法加载文件或程序集“gtk”或其依赖项之一。系统找不到指定的文件。

文件名:“gtk-sharp”

在System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef,System.Security.Policy.Evidence assemblySecurity) 0x00000 in :0

at (包装器远程-调用-与-检查) System.AppDomain:Load (System.Reflection.AssemblyName,System.Security.Policy.Evidence)

在System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) 0x00000 in :0

at (包装器远程-调用-与-检查) System.AppDomain:Load (System.Reflection.AssemblyName)

在System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) 0x00000 in :0

在MakeBundle.QueueAssembly (System.Collections.ArrayList文件,System.String代码基) 0x00000 in :0

在MakeBundle.Main (System.String[] args) 0x00000 in :0

错误致命的未处理异常: System.IO.FileNotFoundException:无法加载文件或程序集“gtk”或其依赖项之一。系统找不到指定的文件。

文件名:“gtk-sharp”

在System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef,System.Security.Policy.Evidence assemblySecurity) 0x00000 in :0

at (包装器远程-调用-与-检查) System.AppDomain:Load (System.Reflection.AssemblyName,System.Security.Policy.Evidence)

在System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) 0x00000 in :0

at (包装器远程-调用-与-检查) System.AppDomain:Load (System.Reflection.AssemblyName)

在System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) 0x00000 in :0

在MakeBundle.QueueAssembly (System.Collections.ArrayList文件,System.String代码基) 0x00000 in :0

在MakeBundle.Main (System.String[] args) 0x00000 in :0

但是,我的PATH变量中有/cygdrive/c/GtkSharp/2.12/lib。如果我在cygwin中键入"gtk-sharp.dll“,我可以检查它,然后返回以下内容:

$ gtk-sharp.dll bash: /cygdrive/c/GtkSharp/2.12/lib/gtk-sharp-2.0/gtk-sharp.dll: cannot execute binary file

所以它应该能够找到文件!

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-15 03:23:27

我找到了一个shell脚本来完成所有这些工作,并将其修改为最新版本,到2013年5月,您只需按如下方式使用该脚本:

https://gist.github.com/tebjan/5581296

1.)安装cygwin并确保您选择以下软件包:- gcc-mingw - pkg-config - mingw-zlib1 - mingw-zlib-devel

2.)安装Mono发布包:“、Gtk#和XSP”

3.)下载脚本,把它放在应用程序之外,并修改它以适应您的环境(仔细阅读文件中的注释)。

4.)打开cygwin并导航到您的应用程序的输出文件夹,在该文件夹中存在ececutable和bin,例如YourProject/bin/Release

5.)使用命令./mkbundle_cygwin.sh执行脚本

故障排除:如果捆绑的可执行文件不能工作,请确保原始的.NET应用程序在mono上工作。您可以通过调用mono.exe并将您的.NET应用程序传递给它,或者通过安装XamarinStudio并从那里运行您的项目来测试它(让您将mono设置为运行时)。

票数 1
EN

Stack Overflow用户

发布于 2011-09-06 16:09:55

好的,我不知道这是否是一个真正的解决方案,但我只是将程序集从C:\GtkSharp\2.12\lib\gtk-Shar-2.0复制到C:\Mono-2.10.5\lib\mono\4.0,现在似乎使用以下步骤绑定OK:

mkbundle -c -o host.c -oo bundle.o --deps app.exe

nano host.c

更改以下内容:

代码语言:javascript
复制
#ifdef _WIN32
#include <windows.h>
#endif`

代码语言:javascript
复制
#ifdef _WIN32
#include <windows.h>
#endif
#undef _WIN32

最后:

代码语言:javascript
复制
gcc -mno-cygwin -o bundled.exe -Wall host.c `pkg-config --cflags --libs mono-2|dos2unix` bundle.o

对我起作用了。虽然我还需要将machine.config从C:\Mono-2.10.5\etc\mono\4.0复制到我的应用程序所在的目录中,并将-机器配置- machine.config传递给mkbundle。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7308044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档