LINUX.ORG.RU

Vala for Windows

 , , , ,


1

3

Решил покодить в универе на Vala. Сижу сейчас на паре. Скачал компилятор под венду, скачал GTK под венду, установил Geany.
Компилирую простую программу — не работает (запускается, но никакого ввода/вывода). Компилирую другую — работает. Пробую несколько раз, понимаю, что не работают только программы, где не используются массивы.

void main() {
	stdout.printf("Hello world!\n");
}
void main() {
	int[] a = { 42 };
	stdout.printf("Hello world!\n");
}
Тут первая выведет хелловорд, а вторая не выведет. Что за фигня? Неужели на вражеской венде всё настолько плохо?

★★★★★

Оба примера работают для меня под Gentoo и nt5.1. Vala ставил по этому руководству (Если не откроется из-за нагрузки, то вот, завикифицировал). В остальных методах установки Vala/MinGW,GTK+3.0 под Windows нашёл недостатки для себя.

UP. По ссылке, приведённой Вами древняя версия, лучше самому собрать.

backbone ★★★★★
()
Последнее исправление: backbone (всего исправлений: 3)
Ответ на: комментарий от backbone

Нашёл версии 0.17, 0.24, 0.25.2, но с ними та же самая проблема. Похоже, виноват не компилятор, а glib. Если виноват mingw, но вообще беда, ибо он универский, а личного места под софт у меня всего 400Мб.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Блин, по тому руководству и правда 1.22Гб mingw-builds плюс msys, Vala, Gtk и всё остальное. Можно придумать способы наверное, но, по-моему, нормальный вариант - попросить админов.

backbone ★★★★★
()
Ответ на: комментарий от backbone

нормальный вариант - попросить админов

Думаю, что так и сделаю, но только после того, как сам получу рабочий вариант.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

А, ну тогда можно ещё посмотреть, какой код генерит Vala: valac -C main.vala. Что он там с этим массивом делает такого:

cc `pkg-config --cflags glib-2.0` main.c `pkg-config --libs glib-2.0` && gdb --args ./a.out # и смотреть backtrace

Но скорее всего, как Вы сказали, проблема в GLib или совместимости компиляторов, которыми собраны GLib и MinGW..

backbone ★★★★★
()
Последнее исправление: backbone (всего исправлений: 2)
Ответ на: комментарий от backbone

можно ещё посмотреть, какой код генерит Vala: valac -C main.vala

/* arr.c generated by valac 0.25.1, the Vala compiler
 * generated from arr.vala, do not modify */


#include <glib.h>
#include <glib-object.h>
#include <stdio.h>




void _vala_main (void);


void _vala_main (void) {
	gint* a = NULL;
	gint* _tmp0_ = NULL;
	gint a_length1 = 0;
	gint _a_size_ = 0;
	FILE* _tmp1_ = NULL;
	_tmp0_ = g_new0 (gint, 1);
	_tmp0_[0] = 42;
	a = _tmp0_;
	a_length1 = 1;
	_a_size_ = a_length1;
	_tmp1_ = stdout;
	fprintf (_tmp1_, "Hello world!\n");
	a = (g_free (a), NULL);
}


int main (int argc, char ** argv) {
#if !GLIB_CHECK_VERSION (2,35,0)
	g_type_init ();
#endif
	_vala_main ();
	return 0;
}

И это компилится и работает.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Генерится то же самое, в том числе и в Geany-1.24 исполняется: <F9>, <F5> (только "./%e" заменил на «%e» в параметрах сборки в Geany).

Итого, различия только в MinGW/Gcc/GLib (на вражеской ОС всё не просто). Можно ещё PATH посмотреть, выхлоп valac main.vala и gdb, если последнее собирается, но сегфолтится.

backbone ★★★★★
()
Ответ на: комментарий от timuaz_one

Чем раньше приложение будет работать не только под онтопиком, тем быстрее он придёт на десктопы.

backbone ★★★★★
()

На винфак

anonymous
()
Ответ на: комментарий от anonymous

Там последняя 3.6.4, и у меня тоже 3.6.4. Где она более свежая?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от backbone

только "./%e" заменил на «%e» в параметрах сборки в Geany

Это я уже сделал.
Не понимаю одного: valac -C test.vala && cc `pkg-config --cflags gobject-2.0` test.c `pkg-config --libs gobject-2.0` даёт рабочий бинарник, а valac test.vala даёт нерабочий бинарник. Вроде бы различий быть не должно вообще.
Пробовал также писать valac -X -mwindows test.vala, но это ни на что не повлияло.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

А зачем мне Qt?

А Windows?

Ты мне версию своего MinGW скажи. У меня была подобная проблема. Собирал недавно что-то под оффтопик с Vala (кажется uTox), с подобной проблемой сталкивался. Точнее глубоко я не лазил, программа просто крешилась при запуске. Пересобрал все зависимости и приложеньице под MinGW-w64, всё заработало.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Я сейчас не скажу. MinGW ставил не я. Скажи в каком файле хранится номер версии MinGW и я завтра посмотрю.

CYB3R ★★★★★
() автор топика
Последнее исправление: CYB3R (всего исправлений: 1)
Ответ на: комментарий от CYB3R

Посмотреть бы все переменные окружения: PATH, PKG_CONFIG_PATH, CC, может там два pkg-config, к примеру или valac другие пути использует при линковке... К слову, при сборке проектов, используется именно valac -c, линковка - по Makefile-ам идёт, что с Autotools, что с CMake. Так что в институте это можно пережить, как говорится, тяжело в учении... :-)

backbone ★★★★★
()
Ответ на: комментарий от Deleted

Потому что MinGW уже установлен админом.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от timuaz_one

Я полностью согласен, но куда же мне писать, если не на ЛОР и не в список рассылки?

CYB3R ★★★★★
() автор топика

2 santy: версия компилятора у меня 0.25.1.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от timuaz_one

ну и вали на винфак со своей виндой

Там его по традиции сначала попросят перезагрузить видну, потом переустановить винду, ну а потом скажут что это на самом деле проблема с его железом.

rupert ★★★★★
()
Ответ на: комментарий от EXL

gcc 4.8.1
Вроде бы не старый.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ничего подозрительного.

Loaded package `Z:\vala\root\share/vala-0.26/vapi/glib-2.0.vapi'
Loaded package `Z:\vala\root\share/vala-0.26/vapi/gobject-2.0.vapi'
arr.vala:2.8-2.17: warning: local variable `a' declared but never used
        int[] a = { 42 };
              ^^^^^^^^^^
cc -o 'Z:/vala/test\arr' 'Z:/vala/test/arr.vala.c' -mms-bitfields -IZ:/vala/root
/include/glib-2.0 -IZ:/vala/root/lib/glib-2.0/include -LZ:/vala/root/lib -lgobje
ct-2.0 -lglib-2.0 -lintl
Compilation succeeded - 1 warning(s)

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

А backtrace в Gdb (gdb --args arr.vala.exe # нажать r, Enter, bt, Enter)?

backbone ★★★★★
()
9 ноября 2015 г.
Ответ на: комментарий от Ancient

Я уже перешёл на использование MSYS2 под вендой, так что всё окей.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от backbone

То что си производительней на некоторых тестах — не значит что вала сгенерирует быстрый си код.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Есть. Для нативных бинарников не нужно подбирать нужную версию .NET Framework.

CYB3R ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.