我是一名长期从事C#开发的开发者,但对于Mono和特别是Gtk#还比较新。我已经使用C#和Gtk#开发了一个小应用程序。我需要这个应用程序在Windows、Linux和Mac上运行,因此我决定使用Mono,到目前为止,它似乎是一个很酷的框架。
我的简单应用程序启动基于用户选择的本地目录和端口的XSP Web服务器。理想情况下,我希望我的应用程序在开始之前无需安装Mono框架,但这不是必须的。我正在使用以下库:
using System;
using Gtk;
using System.Net;
using Mono.WebServer;
using System.Diagnostics;
我正在Mac上进行开发(Snow Leopard,10.6.7)。 我的可执行文件在我的Mac上完美运行。 但是在Ubuntu和Windows上我遇到了问题。我的应用程序在Ubuntu(11.04)上部分工作 - 它启动并似乎在工作,但是当我尝试启动XSP Web服务器时失败了,这是可以预料的,因为我的Ubuntu机器上可能没有安装Mono.Webserver。在Windows(7,64位)上,我双击它后立即崩溃。崩溃报告告诉我发生了System.IO.FileNotFoundException错误。 可能是由于同样缺少XSP库造成的?无论如何,我在互联网上查找并了解了mkbundle。与各种论坛线程建议的一样,我已经进行了以下设置:export AS="as -arch i386"
我已经导航到我的项目的 /bin/Release 目录,然后运行了以下命令:
mkbundle MivandoLocalServer.exe -o MivandoLocalServer --deps
但是我得到了以下输出,最终会失败:
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目录相关的一些问题。这是真的吗?如果是,我需要做什么才能让它正常工作?
希望有人能够帮助我。谢谢!
最好的祝福, Sebastian
附言:我也在Mono的主页论坛上发布了这个问题,但迄今没有回复。
更新:我怀疑MacPorts干扰了我的pkg-config目录设置。当我在终端中输入以下命令时,mkbundle允许我进行编译。但我仍然遇到了一些问题。
export PKG_CONFIG_PATH="/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/"
export AS="as -arch i386"
export CC="cc -arch i386"
执行以下mkbundle
命令会生成一个Unix归档文件,大小为4.9 MB,其中包含所有必要的依赖项。当我在Mac上双击此新文件时,终端窗口弹出并启动我的应用程序。太棒了!但是在Windows和Ubuntu中无法工作。
mkbundle MivandoLocalServer.exe -o MivandoLocalServerBundle --deps -z
我想要得到的是一个捆绑在一起的可执行文件,可以在Windows和Ubuntu上运行。到目前为止,我还没有找到让我能够做到这一点的解决方案。我尝试在我的Windows 7机器上安装MonoDevelop,并将我的解决方案复制到那里进行构建。但由于我的应用程序依赖于Mono.WebServer2
库,所以我无法在Windows上构建它。我在互联网上也没有找到下载Mono.WebServer2.dll
的地方。
mono-2.pc
实际上就在那个路径中,这让我更加困惑。 - Sebastian Brandes