我是一个长期的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 (雪豹,10.6.7)。我的可执行文件在我的Mac上工作得很好。但是我在Ubuntu和Windows上遇到了问题。我的应用程序部分是在Ubuntu (11.04)上工作的--它启动了,似乎正在工作,但当我尝试启动XSP服务器时,它却失败了,这似乎是可以期待的,因为Mono.Webserver可能没有安装在我的Ubuntu机器上。在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目录有关的问题。这是真的吗?如果是的话,我要怎么做才能让它发挥作用?
我希望有人能帮助我。谢谢!
向你问好,塞巴斯蒂安
PS。我也在Mono的主页上发布了这个问题,但到目前为止没有任何回应。
更新:我怀疑干扰了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命令将生成4.9MB的Unix存档,其中包含所有必要的依赖项。当我双击Mac上的这个新文件时,会弹出一个终端窗口并启动我的应用程序。甜!但这在Windows和Ubuntu中都不起作用。
mkbundle MivandoLocalServer.exe -o MivandoLocalServerBundle --deps -z我想要接收的是可以在Windows和Ubuntu中运行的捆绑可执行文件。到目前为止,我还没有找到一个让我这样做的解决方案。我试图在我的Windows7计算机上安装MonoDevelop,复制我的解决方案并在那里构建它。但是由于我的应用程序依赖于Mono.WebServer2库,所以我无法在Windows上构建它。我还没能在互联网上的任何地方找到Mono.WebServer2.dll下载Windows。
发布于 2014-09-23 17:19:22
首先,这一情况涉及两个单独的问题,我将分别讨论:
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
https://stackoverflow.com/questions/6560001
复制相似问题