gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:29:51 24 4
gpt4 key购买 nike

我是一名长期的 C# 开发人员,但不熟悉 Mono,尤其是 Gtk#。我使用 C# 和 Gtk# 开发了一个小应用程序。我需要这个应用程序在 Windows、Linux 和 Mac 上运行,所以我决定选择 Mono,到目前为止,它似乎是一个很酷的框架。

我的简单应用程序所做的是根据用户选择的本地目录和端口启动 XSP 网络服务器。理想情况下,我希望我的应用程序无需首先安装 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 网络服务器时失败,这似乎是意料之中的,因为 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 目录有关的问题。这是真的?如果是,我需要做什么才能让它发挥作用?

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

最好的问候,塞巴斯蒂安

附言。我也在 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 命令会生成 4.9 MB 的 Unix 存档,其中包括所有必要的依赖项。当我在我的 Mac 上双击这个新文件时,会弹出一个终端窗口并启动我的应用程序。甜的!但这在 Windows 和 Ubuntu 中都不起作用。

mkbundle MivandoLocalServer.exe -o MivandoLocalServerBundle --deps -z

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

最佳答案

首先,这种情况涉及两个不同的问题,我将分别解决:

  1. 架构 - 仅限 i386
  2. 构建和打包

<强>1。架构

首先,并非所有 Windows 和 Linux 机器都在 i386 架构上运行,因此请确保您使用的是 i386 架构。它们更有可能是 i386,但 Linux 可以轻松地在许多体系结构上运行,Windows 最近也通过新的平板电脑 cpu 类型尝试了这条道路(他们过去支持它,但很快就失去了支持)。

<强>2。构建和打包

当以任何操作系统为目标时,打包路径必然会有所不同,因此您应该针对每个目标操作系统使用该目标操作系统进行构建。如果你想让 mkbundle 在 Windows 上工作,整个工具链需要安装在那里,Windows 需要一个特殊的脚本来让它正确,但由于 mkbundle 是为类 Unix 操作系统制作的,它应该在 Linux 上工作而无需特殊考虑:

Create C# executable with mkbundle on windows

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

关于c# - 使用 mkbundle 将 Mono GTK# 应用程序移植到其他平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6560001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com