Подтвердить что ты не робот

Использование mkbundle для подключения приложения Mono GTK # к другим платформам

Я давний разработчик С#, но новичок в Mono и, особенно, Gtk #. Я разработал небольшое приложение, использующее С# и 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. Это правда? Если да, что мне нужно сделать, это сработает?

Я надеюсь, что кто-то сможет мне помочь. Благодарю!

С уважением, Sebastian

PS. Я также разместил этот вопрос на форумах на домашней странице 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 МБ, который включает все необходимые зависимости. Когда я дважды нажимаю на этот новый файл на своем Mac, появляется окно терминала и запускает мое приложение. Милая! Но это не работает в Windows и в Ubuntu.

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

То, что я хотел бы получить, - это комплектный исполняемый файл, который можно запустить в Windows и Ubuntu. До сих пор я не нашел решения, которое позволяет мне это делать. Я попытался установить MonoDevelop на моем компьютере с Windows 7, скопировать мое решение и построить его там. Но поскольку мое приложение зависит от библиотеки Mono.WebServer2, я не могу его создать в Windows. Я не смог найти Mono.WebServer2.dll для загрузки для Windows в любом месте в Интернете.

4b9b3361

Ответ 1

Прежде всего, эта ситуация охватывает два отдельных вопроса, которые я буду рассматривать отдельно:

  • Архитектура - только i386
  • Сборка и упаковка

1. Архитектура

Прежде всего, не все компьютеры Windows и Linux работают на архитектуре i386, поэтому убедитесь, что вы используете тот, который есть. Они, скорее всего, будут i386, но Linux может легко работать на многих архитектурах, и Windows недавно решилась на этот путь (они поддерживали его в прошлом, но быстро потеряли поддержку) с новыми типами процессоров планшетного ПК.

2. Создание и упаковка

При настройке на какую-либо операционную систему существуют определенные различия в пути к упаковке, поэтому вы должны создавать для каждой целевой ОС эту целевую ОС. Если вы хотите, чтобы mkbundle работал на Windows, вся необходимая инструментальная цепочка должна быть установлена ​​там, и Windows требует специального script, чтобы это исправить, но поскольку mkbundle был создан для Unix-подобных ОС, он должен работать на Linux без особых соображений:

Создать исполняемый файл С# с mkbundle в окнах

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