Как настроить GTK на Visual Studio 2010
Я попытался настроить gtk+ на Visual Studio, но не работает должным образом. Может кто-нибудь предложить мне правильное решение, как установить GTK на Visual Studio 2010
3 ответа
У меня есть GTK+, работающий с VS2010, поэтому, если вы хотите, чтобы он тоже работал, будьте готовы повеселиться, потому что это займет несколько минут.
Прежде всего, загрузите последнюю версию Windows All-In-One. Необязательная прямая ссылка для загрузки комплекта GTK 2.24, которую я использовал здесь. Прямая ссылка на 32-битную версию. Я не тестировал 64-битную версию, потому что она все еще указана как экспериментальная.
Как только вы загрузили пакет, распакуйте его в нечто вроде C:\gtk
или в моем случае D:\gtk
Далее мы создадим переменную системной среды для папки GTK. Откройте командную строку и напишите: setx GTKDIR {Path to your GTK folder} /m
который в моем случае будет setx GTKDIR D:\gtk /m
Мы также собираемся добавить DLL-файлы, необходимые для запуска встроенных приложений GTK+ в Windows, в нашу системную переменную PATH. Чтобы упростить задачу, я предлагаю вам отредактировать системный PATH с помощью PathEditor. Теперь добавьте путь к папке бинарных файлов GDK, которая в моем случае - D:\gtk\bin, к системной переменной PATH. Убедитесь, что папка GTK bin была добавлена в PATH, введя PATH в командной строке.
Теперь мы переходим к Visual Studio 2010 и создаем новый проект.
File
->New
->Project
Visual C++
->Win32
->Win32 Console Application
Затем появляется Мастер приложений.
Нажмите, чтобы выбрать:
Windows Application
Empty Project
нажмите Готово, чтобы продолжить.
Прежде чем добавить какие-либо исходные файлы, щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите Свойства. Теперь перейдите в Свойства конфигурации, а затем VC++ Каталоги. Теперь нам нужно добавить файлы включения и библиотеки из GTK в каталоги включения и каталоги библиотеки.
У вас должно быть следующее в ваших каталогах включения
$(GTKDIR)\lib\gtk-2.0\include
$(GTKDIR)\lib\glib-2.0\include
$(GTKDIR)\include
и библиотечные каталоги:
$(GTKDIR)\lib
Пока мы все еще находимся в представлении "Свойства проекта", нажмите " Линкер", а затем " Система". Найдите подсистему справа и щелкните раскрывающийся список. Выберите Windows /SUBSYSTEM:WINDOWS
Далее мы должны сгенерировать флаги для компилятора и компоновщика. К счастью, GTK+ поставляется с симпатичным небольшим инструментом pkg-config, который мы будем использовать для автоматической генерации этих флагов для нас. Инструмент pkg-config находится в папке bin GTK. В моем случае это D:\gtk\bin или %GTKDIR%\bin с использованием нашей системной переменной, которую мы определили ранее. Просто перейдите в папку bin (созданные текстовые файлы будут выводиться туда) с помощью командной строки и выполните следующее:
pkg-config --cflags gtk+-2.0 --msvc-syntax > compilerflags.txt
Это создаст нужные нам флаги компилятора и сохранит их в текстовом файле. Мой результат для флагов компилятора (я убрал флаг -mms-bitfields, это флаг gcc only, который нам не нужен):
-ID:/gtk/include/gtk-2.0 -ID:/gtk/lib/gtk-2.0/include -ID:/gtk/include/atk-1.0 -ID:/gtk/include/cairo -ID:/gtk/include/gdk-pixbuf-2.0 -ID:/gtk/include/pango-1.0 -ID:/gtk/include/glib-2.0 -ID:/gtk/lib/glib-2.0/include -ID:/gtk/include -ID:/gtk/include/freetype2 -ID:/gtk/include/libpng14
Мы сделаем то же самое для флагов компоновщика:
pkg-config --libs gtk+-2.0 --msvc-syntax > linkerflags.txt
Мой результат для флагов компоновщика:
/libpath:D:/gtk/lib gtk-win32-2.0.lib gdk-win32-2.0.lib atk-1.0.lib gio-2.0.lib pangowin32-1.0.lib gdi32.lib pangocairo-1.0.lib gdk_pixbuf-2.0.lib pango-1.0.lib cairo.lib gobject-2.0.lib gmodule-2.0.lib gthread-2.0.lib glib-2.0.lib intl.lib
Сгенерировав все необходимые флаги, нам нужно добавить их в наш проект. Еще раз, щелкните правой кнопкой мыши на имени проекта и выберите Свойства. Теперь иди в C/C++
и нажмите на Command Line
, Справа вы должны увидеть пустое поле с названием Дополнительные параметры. Скопируйте и вставьте содержимое compilerflags.txt в это поле.
После завершения выше, нажмите на компоновщик, а затем командной строки. Еще раз, просто скопируйте и вставьте содержимое файла linkerflags.txt в поле Дополнительные параметры. Пока мы здесь, добавьте один последний флаг компоновщика /ENTRY:mainCRTStartup Этот флаг сообщает Visual Studio, что мы хотим использовать стандартный main(), а не _tmain() от Microsoft в качестве основной точки входа в программу.
Наконец, в папке "Исходные файлы" создайте и добавьте новый файл.cpp со следующим:
#include <gtk-2.0\gtk\gtk.h>
int main(int argc, char* argv[])
{
gtk_init(&argc, &argv);
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(window, 300, 200);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_window_set_title(GTK_WINDOW(window), "GTK+ with VS2010");
gtk_widget_show(window);
gtk_main();
return 0;
}
Теперь все должно быть готово к компиляции, компоновке и запуску. Если все прошло хорошо, вас должно приветствовать следующее:
Ну, это было весело, правда?:)
Если вы создаете стек GTK+ для Windows с помощью подобного руководства, то роскошь использования предварительно скомпилированного двоичного файла не будет в вашем распоряжении.
В этом случае я бы предложил следующий подход.
Загрузите предварительно скомпилированные двоичные файлы - это имеет два преимущества.
- Он поставляется с утилитой pkg-config.exe, которую вы можете использовать для скомпилированного источника.
- Он также содержит папку pkgconfig с множеством файлов.pc, которые можно адаптировать для скомпилированного источника.
Скомпилируйте пакеты в режиме отладки / выпуска - это главное преимущество его компиляции - и систематически размещайте заголовочные файлы, библиотеки libs и dlls / exe в папках include, lib и bin соответственно.
Скопируйте папку pkgconfig из precompiled_gtk_source\bin в compiler_gtk_source\bin и задайте путь к переменной PKG_CONFIG_PATH, чтобы добавить к ней compiler_gtk_source\bin\pkgconfig.
Теперь, учитывая тот факт, что имена библиотек, создаваемых при компиляции gtk самостоятельно, и имена соответствующих библиотек в скомпилированном пакете могут отличаться, вам, возможно, придется внести необходимые изменения в файлы compiler_gtk_source\bin\pkgconfig *.pc. Я бы пошел здесь сверху вниз (мы скоро увидим преимущества). Под "сверху вниз" я просто подразумеваю, что конечным продуктом будет тот, который будет отредактирован первым.
Например, в этом случае gtk+ является конечным продуктом, и я пойду сначала для настройки.pc этого пакета. Процедура выглядит следующим образом:
- Сначала посмотрите на имя созданной DLL. В моем случае это gtk-3.0. Если файл.pc, поставляемый с предварительно скомпилированными двоичными файлами, имеет другое имя, измените его соответствующим образом - в моем случае это gtk-3.0.pc. (Это должно быть в случае со всеми другими файлами.pc.)
- Откройте gtk-3.0.pc в текстовом редакторе, и вы увидите такие вещи, как показано ниже.
Файл gtk-3.0.pc:
prefix=c:/gtk_compilation/vs12/win32
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
targets=win32
Name: GTK+
Description: GTK+ Graphical UI Library
Version: 3.18.2
Requires: gdk-3.0 atk-1.0 cairo cairo-gobject gdk_pixbuf-2.0 gio-2.0
Requires.private: atk
Libs: -L${libdir} -lgtk-3
Cflags: -I${includedir}/gtk-3.0 -mms-bitfields
На приведенном выше изображен мой настроенный файл. Если вы не знаете, что делает каждая строка, вы можете взглянуть на справку pkg-config. Однако опция Require требует особого упоминания. Это место, где вы кладете DLL зависимостей - снова убедитесь, что имя DLL точно соответствует тому, что у вас есть в папке bin.
Нам нужно рекурсивно изменить файлы.pc для библиотек DLL, которые включены после инструкции Require, и если какой-либо файл.pcs отсутствует или если есть несоответствие имени, вы можете внести соответствующие изменения. К настоящему времени вы уже должны были понять преимущество подхода сверху вниз. Это помогает нам систематически сортировать файлы зависимостей.pc до тех пор, пока мы не разберем их все. Теперь выполните команду ниже, чтобы увидеть, все ли работает.
Наконец, запустите команду pkg-config, как показано ниже:
pkg-config --cflags gtk-3.0 --msvc-syntax > compilerflags.txt
pkg-config --libs gtk+-2.0 --msvc-syntax > linkerflags.txt
Я просто перенаправил результаты в текстовый файл с именем compilerflags.txt & linkerflags.txt, чтобы вы могли использовать их в любое время, вырезая, копируя и вставляя. Конечно, вы должны сохранять только специфичные для компилятора флаги.
Надеюсь, это когда-нибудь поможет.