Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ GTK+ _ Компиляция GTK под Windows

Автор: Andra 28.11.2010, 1:45

Здравствуйте. Хочу скомпилировать свои проекты, написанные на GTK из-под Linux под Windows.
Поставил MinGW, скачал gtk+-bundle_2.22.0-20101016_win32, а не работает(
Простые проекты не на GTK, а на чистом Си компилирует на ура.
Использую gtk, cairo, threads
Ошибка вообще не понятная :(


Помогите! плиз

Автор: Litkevich Yuriy 28.11.2010, 1:52

ошибка типовая - линкеру что-то не понятно, обычно когда каких-то библиотек не хватает

Автор: Andra 28.11.2010, 1:58

Цитата(Litkevich Yuriy @ 28.11.2010, 1:52) *
ошибка типовая - линкеру что-то не понятно, обычно когда каких-то библиотек не хватает


А как исправить?
Делаю все по порядку
1) Устанавливаю mingw-get-inst-20101030.exe
2) Распаковываю gtk+-bundle_2.22.0-20101016_win32. Заменяю все файлы в папке MinGW. Или надо только дописывать недостающие?
3) В папку c:\FILES\MinGW\msys\1.0\home\Andrey\ складываю файл моего проекта
4) Запускаю c:\FILES\MinGW\msys\1.0\msys.bat
5) Там пишу gcc 1.c `pkg-config --cflags gtk+-2.0`

Автор: Andra 28.11.2010, 2:41

ухх, ну я совсем замучался, все варианты перепробовал, никак не пойму почему не работает...
Может есть какие еще варианты или я что-то не так делаю?
P.S. у меня есть Visual Studio 2010 pro, может быть там можно что-нибудь сделать?

Автор: Iron Bug 28.11.2010, 10:52

а ты проверял, что у тебя pkg-config --cflags gtk+-2.0 выдаёт нужные результаты? может, в путях не прописано что-то и там пусто вообще.

Автор: Litkevich Yuriy 28.11.2010, 13:03

Цитата(Andra @ 28.11.2010, 3:58) *
2) Распаковываю gtk+-bundle_2.22.0-20101016_win32. Заменяю все файлы в папке MinGW. Или надо только дописывать недостающие?
вот это что-то вообще не то. папку компилятора трогать не надо.

Автор: Andra 2.12.2010, 20:47

я разобрался, компилировать он хочет только одним способом. Вот он:
1) Пишем makefile и помещаем его в папку home
2) Его содержимое:

CC=gcc
CFLAGS=`pkg-config --cflags --libs gtk+-2.0`
CFLAGS+=-mwindows
SRC=name.c
OBJ=$(SRC:.c=.o)
OUT=name.exe

all: $(OUT)
    rm $(OBJ) #Remove .o

$(OBJ) :
    $(CC) $(SRC) $(CFLAGS) -c #Create .o

$(OUT) : $(OBJ)
    $(CC) $(OBJ) $(CFLAGS) -o $@ #Link .o

3) В msys.bat пишем make и все работает
И делается это только так. Файл становится зависимым от dll библиотек из папки bin и без них не запускается.
Т.е. теперь надо их всегда складывать в папку к моей программе или можно от этого как-нибудь избавиться?)
И еще интересно почему не сработал обычный способ компиляции gcc name.c `pkg-config --cflags --libs gtk+-2.0`?

Автор: Iron Bug 2.12.2010, 21:17

а -mwindows у тебя был указан?

gtk можно собрать статически и линковать в виде статических библиотек. тогда не будет зависимостей. но файл, соответственно, будет жирный.

Автор: Гость_Andra_ 26.4.2011, 20:43

Цитата(Iron Bug @ 2.12.2010, 21:17) *
gtk можно собрать статически и линковать в виде статических библиотек. тогда не будет зависимостей. но файл, соответственно, будет жирный.


Можно поподробней, как это сделать?
И еще вопрос, как добавить к окну соответствующее оформление Windows, чтобы было не в стиле 98 windows?

Автор: Гость_sunny_* 3.5.2011, 20:21

Чтобы применить тему в стиле Windows нужно в файле C:\GTK\etc\gtk-2.0\gtkrc [У меня GTK стоит в папке C:\GTK]
написать:
gtk-theme-name = "MS-Windows"



Автор: Гость_sunny_* 3.5.2011, 20:27

Я давно хочу сделать статические библиотеки для GTK, заманчиво не таскать с собой кучу DLL библиотек.
Я вижу единственный вариант как это сделать - скачать исходники glib, gtk, pango и прочее,
потом по порядку создать статические библиотеки *.a (или *.lib для компиляции в VisualStudio)

Автор: Iron Bug 4.5.2011, 13:43

это можно сделать. но ты упаришься линковать отдельные .a файлы и выходной файл будет поистине огромен.

Автор: sunny 11.5.2011, 5:59

Цитата(Iron Bug @ 4.5.2011, 13:43) *
это можно сделать. но ты упаришься линковать отдельные .a файлы и выходной файл будет поистине огромен.

В исходниках есть makefiles для win32. У configure даже есть ключ --enable-static для сборки статической библиотеки.
Так что запарки при сборке GTK теоретически должно быть минимум, потом меняем родные *.a или *.lib файлы на статические и дальше компиляция приложения идёт без отличий.
Другое дело выходной размер файла, думаю для приложения он будет 3-10 Мб, но по любому не больше чем таскать с собой 12-15 Мб dll-библиотек. А вот каталоги etc и lib наверное придётся с собой всё равно таскать, так что в один файл наверное не уложиться (из за чего статическая линковка теряет смысл).

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)