首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mkbundle将Mono GTK#应用程序移植到其他平台

使用mkbundle将Mono GTK#应用程序移植到其他平台
EN

Stack Overflow用户
提问于 2011-07-02 22:44:41
回答 1查看 2.2K关注 0票数 12

我是一个长期的C#开发人员,但对Mono,特别是Gtk#来说还是个新手.我用C#和Gtk#开发了一个小应用程序。我需要这个应用程序在Windows,Linux和Mac上工作,所以我决定选择Mono,到目前为止,它似乎是一个很酷的框架。

我的简单应用程序所做的就是根据用户选择的本地目录和端口启动XSP web服务器。理想情况下,我希望我的应用程序不需要在一开始就安装Mono框架,但这并不是必须的。我正在使用以下库:

代码语言:javascript
复制
using System; 
using Gtk; 
using System.Net; 
using Mono.WebServer; 
using System.Diagnostics; 

我正在开发一个Mac (雪豹,10.6.7)。我的可执行文件在我的Mac上工作得很好。但是我在Ubuntu和Windows上遇到了问题。我的应用程序部分是在Ubuntu (11.04)上工作的--它启动了,似乎正在工作,但当我尝试启动XSP服务器时,它却失败了,这似乎是可以期待的,因为Mono.Webserver可能没有安装在我的Ubuntu机器上。在Windows (7,64位)上,当我双击我的应用程序时,它会立即崩溃。崩溃报告告诉我发生了System.IO.FileNotFoundException错误。可能是因为同样的XSP库丢失了吗?

不管怎样,我在网上环顾四周,了解到了mkbundle。我已经按照各种论坛线程的建议执行了以下设置:

代码语言:javascript
复制
export AS="as -arch i386"

我已经导航到项目的/bin/Release目录,然后运行以下命令:

代码语言:javascript
复制
mkbundle MivandoLocalServer.exe -o MivandoLocalServer --deps

但是我得到了以下输出,但最终失败了:

代码语言:javascript
复制
Compiling: 
as -arch i386 -o temp.o temp.s 
cc -g -o MivandoLocalServer -Wall temp.c `pkg-config --cflags --libs mono-2`  temp.o 
Package mono-2 was not found in the pkg-config search path. 
Perhaps you should add the directory containing `mono-2.pc' 
to the PKG_CONFIG_PATH environment variable 
No package 'mono-2' found 
temp.c:2:36: error: mono/metadata/assembly.h: No such file or directory 
temp.c:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘assembly_bundle_MivandoLocalServer_exe’ 
temp.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
temp.c:18: error: ‘NULL’ undeclared here (not in a function) 
temp.c: In function ‘mono_mkbundle_init’: 
temp.c:22: warning: implicit declaration of function ‘mono_register_bundled_assemblies’ 
temp.c:22: error: ‘bundled’ undeclared (first use in this function) 
temp.c:22: error: (Each undeclared identifier is reported only once 
temp.c:22: error: for each function it appears in.) 
temp.c: In function ‘main’: 
temp.c:114: warning: implicit declaration of function ‘mono_set_dirs’ 
[Fail]

我真的不知道从这里该怎么办。我已经安装了MacPorts,并且我读到这可能会导致一些与pkg-config目录有关的问题。这是真的吗?如果是的话,我要怎么做才能让它发挥作用?

我希望有人能帮助我。谢谢!

向你问好,塞巴斯蒂安

PS。我也在Mono的主页上发布了这个问题,但到目前为止没有任何回应。

更新:我怀疑干扰了pkg-config目录设置。当我在终端中输入以下命令时,mkbundle允许我编译。但我还是遇到了一些问题。

代码语言:javascript
复制
export PKG_CONFIG_PATH="/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/"
export AS="as -arch i386"
export CC="cc -arch i386"

执行以下mkbundle命令将生成4.9MB的Unix存档,其中包含所有必要的依赖项。当我双击Mac上的这个新文件时,会弹出一个终端窗口并启动我的应用程序。甜!但这在Windows和Ubuntu中都不起作用。

代码语言:javascript
复制
mkbundle MivandoLocalServer.exe -o MivandoLocalServerBundle --deps -z

我想要接收的是可以在Windows和Ubuntu中运行的捆绑可执行文件。到目前为止,我还没有找到一个让我这样做的解决方案。我试图在我的Windows7计算机上安装MonoDevelop,复制我的解决方案并在那里构建它。但是由于我的应用程序依赖于Mono.WebServer2库,所以我无法在Windows上构建它。我还没能在互联网上的任何地方找到Mono.WebServer2.dll下载Windows。

EN

回答 1

Stack Overflow用户

发布于 2014-09-23 17:19:22

首先,这一情况涉及两个单独的问题,我将分别讨论:

  1. 体系结构-只有i386的
  2. 构建和打包

1.体系结构

首先,并不是所有的Windows和Linux机器都运行在i386体系结构上,所以请确保使用的是一台。它们更有可能是i386,但是Linux可以很容易地在许多体系结构上运行,而且Windows最近也尝试使用新的tablet类型(他们过去支持它,但它很快就失去了支持)。

2.构建和打包

当针对任何操作系统时,在打包路径上必然会有差异,因此您应该为每个目标操作系统构建该目标操作系统。如果您希望mkbundle在Windows上工作,那么需要在那里安装整个工具链,而Windows需要一个特殊的脚本才能正确运行,但是由于mkbundle是为类似Unix的OSs而创建的,所以它应该在Linux上工作,而不需要特别考虑:

Create C# executable with mkbundle on windows

http://linux.die.net/man/1/mkbundle

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

https://stackoverflow.com/questions/6560001

复制
相关文章

相似问题

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