На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Настройка CodeBlocks в Windows для создания GTK приложений
    У меня был работающий проект, настроенный на библиотеку gtk+-bundle_3.6.4-20130513_win64. Я решил переписать проект под msys2. Не разобрался со следующим. Раньше в настройках проекта в Linker settings->Link libraries были следующие библиотеки
    <Linker>
    <Add library="gtk-win32-3.0" />
    <Add library="gobject-2.0" />
    <Add library="glib-2.0" />
    </Linker>
    В msys2 я этих библиотек не нашел. Вместо файлов с расширением "lib" в директории с библиотеками файлы с расширением "а". Подскажите, пожалуйста, как решить эту проблему?
      tumanovalex, помогу, но частично. Что касается использования M$ Visual Studio и тамошних компиляторов - я там не в курсе.

      Ну во-первых ...

      user posted image

      Давно хотел посмотреть на этого зверя CodeBlocks. Установил и немного разобрался. Выше на скрине собранный GTK3-проект из соседней темы.

      Во-вторых ...

      Давай разбираться с инструментарием. Тезисно ...

      1. Что такое MSYS2? Это среда с эмуляцией Arch Linux. По сути, в ней все инструменты копируют набор линукса, но скомпилированы в исполняемые файлы виндовс формата PE;
      2. Что нам нужно от MSYS2? Формально нужно две основные вещи - тулчейны и библиотеки к этим тулчейнам;
      3. Что такое тулчейн (toolchain)? Тулчейн - это набор инструментов для разработки под конкретную цель, в который входят компилятор(ы), линкер(ы), отладчик(и) & etc.;
      4. Какие туллчейны и библиотеки нам предоставляет MSYS? Следующие: mingw32, mingw64, clang32, clang64, ucrt64 (я разбирался только с первыми двумя пока)

      Таким образом, установив MSYS2, мы должны с помощью утилиты pacman (в среде MSYS2 / из меню открыть терминал MSYS2) доустановить нам необходимое - сами тулчейны и либы к ним. Например:

      ExpandedWrap disabled
        pacman -S --noconfirm mingw-w64-i686-gcc
        pacman -S --noconfirm mingw-w64-i686-gdb
        pacman -S --noconfirm mingw-w64-i686-cmake
        pacman -S --noconfirm mingw-w64-i686-extra-cmake-modules
        pacman -S --noconfirm mingw-w64-i686-gtk3
        pacman -S --noconfirm glib2-devel

      Далее нужно открыть среду CodeBlocks и в разделе "Settings"->"Compilers" прописать установленный нами тулчейн. Для этого в самом верху диалога, при выбранном "GNU GCC Compiler", кликаем [Copy]. А в окошке его обзываем, к примеру, MSYS2-MinGW-x32. Все - сделали "дубликат" компилятора. Выбираем его из списка и заходим на закладку "Toolchain executables". Здесь нужно только одно действие - указать директорию тулчейна. К примеру, у меня сам MSYS2 установлен в каталог "E:\Tools\MSys64", и для данного тулчейна я должен выбрать "E:\Tools\MSys64\mingw32". Остальное править не нужно.

      Сделав тестовый проект, в настройках проекта мы добавляем нужные либы:

      user posted image

      Потом:

      user posted image

      Собственно, можно собирать. В выбранном тулчейне есть свой компилятор, линкер и прочее. Зависимые либы мы указали. Кстати - все доступные для выбора либы нам, в окошке справа, нашла утилита pkg-config.

      По итогу

      Установил и настроив MSYS2 и CodeBlocks нам больше ничего не нужно, в том числе и внешние компиляторы. В тулчейнах все, что необходимо - уже присутствует.

      Цитата tumanovalex @
      В msys2 я этих библиотек не нашел. Вместо файлов с расширением "lib" в директории с библиотеками файлы с расширением "а". Подскажите, пожалуйста, как решить эту проблему?


      Все просто. В GNU-тулчейнах формат библиотек не .lib, а другой .a. Этот формат поддерживается стандартной утилитой из GNU-тулчейнов под названием ar.

      Ну вот как-то так.
        Спасибо за ответ. В настройках CodeBlocks установил C:\msys64\mingw64. А вот в настройках проекта на вкладке Library ничего не появилось. Для того, чтобы появилось дерево, нужно запустить утилиту pkg-config или где-то ее прописать в настройках проекта?
          Цитата tumanovalex @
          Для того, чтобы появилось дерево, нужно запустить утилиту pkg-config или где-то ее прописать в настройках проекта?

          Сперва, думаю, нужно проверить что она вообще есть. В терминале MSYS2 набери:
          ExpandedWrap disabled
            whereis pkg-config
            pkg-config: /usr/bin/pkg-config.exe.
            Я не сделал дубликат компилятора, поэтому и были проблемы. Как только сделал - все появилось. Я даже не знал, что так удобно можно настраивать CodeBlocks через pkg-config.
            Остались следующие вопросы:
            - где то в настройках проекта скрыт вызов pkg-config или он по умолчанию вызывается при изменениях в проекте?
            - gtk4 устанавливается также, как и gtk3, только в командах нужно заменить gtk3 на gtk4 (это мне на будущее, пока разобраться бы с gtk3)?
            Огромное тебе спасибо. Без тебя я бы не разобрался.
              Цитата tumanovalex @
              - где то в настройках проекта скрыт вызов pkg-config или он по умолчанию вызывается при изменениях в проекте?

              А вот этого я не знаю. Я CоdeBlocks только вчера увидел :)

              Цитата tumanovalex @
              - gtk4 устанавливается также, как и gtk3, только в командах нужно заменить gtk3 на gtk4 (это мне на будущее, пока разобраться бы с gtk3)?

              Ну да - раз pkg-config увидел эту либу.

              Цитата tumanovalex @
              Огромное тебе спасибо. Без тебя я бы не разобрался.

              :rolleyes:
                Еще раз большое спасибо. Надеюсь на твою помощь в освоении кроссплатформенного программирования и С++. А она мне очень понадобится, вопросов у меня наверняка возникнет еще очень много.
                  Ну я на форуме часто бываю, будет возможность помогу чем смогу.
                    Простая программа
                    ExpandedWrap disabled
                      #include <gtk/gtk.h>
                      int main(int argc, char *argv[])
                      {
                        GtkBuilder *builder;
                        GtkWidget *win;
                        gtk_init(&argc,&argv);
                        builder = gtk_builder_new();
                        gtk_builder_add_from_file(builder,"gladetest.glade",NULL);
                        win = GTK_WIDGET(gtk_builder_get_object(builder,"gladetest"));
                        gtk_builder_connect_signals(builder,NULL);
                        g_object_unref(builder);
                        gtk_widget_show(win);
                        gtk_main();
                        g_signal_connect (win, "destroy", gtk_main_quit, NULL);
                        return 0;
                      }
                    не компилируется, на строке gtk_init(&argc,&argv) при запуске отладки происходит останов. Видимо, забыл подключить библиотеку, но не знаю - какую. Скриншоты настроек и проект прикрепил. Помогите, пожалуйста, правильно настроить CodeBlocks и проект.
                    Скриншоты параметров настройки и проект прикрепил
                    Прикреплённый файлПрикреплённый файлcbGtkStudyWin.zip (2,02 Кбайт, скачиваний: 9)
                    Прикреплённая картинка
                    Прикреплённая картинка

                    Прикреплённая картинка
                    Прикреплённая картинка

                    Прикреплённая картинка
                    Прикреплённая картинка
                      Цитата spirid1990 @
                      не компилируется, на строке gtk_init(&argc,&argv) при запуске отладки происходит останов.

                      Не так нужно. Нужно написать "не собирается - вот лог:", и скопировать лог сборки. Тогда даже те, у кого не установлен Code::Blocks, могут попытаться успешно помочь.
                        -------------- Build: Debug in cbGtkStudyWin (compiler: MinGW_Msys2)---------------

                        gcc.exe -o bin\Debug\cbGtkStudyWin.exe obj\Debug\main.o
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: obj\Debug\main.o: in function `main':
                        D:\MyProgramming\cbGtkStudyWin/main.c:7: undefined reference to `gtk_init_abi_check'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:8: undefined reference to `gtk_builder_new'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:9: undefined reference to `gtk_builder_add_from_file'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:10: undefined reference to `gtk_widget_get_type'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:10: undefined reference to `gtk_builder_get_object'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:10: undefined reference to `g_type_check_instance_cast'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:11: undefined reference to `gtk_builder_connect_signals'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:12: undefined reference to `g_object_unref'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:13: undefined reference to `gtk_widget_show'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:14: undefined reference to `gtk_main'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\MyProgramming\cbGtkStudyWin/main.c:15: undefined reference to `g_signal_connect_data'
                        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: obj\Debug\main.o:main.c:(.rdata$.refptr.gtk_main_quit[.refptr.gtk_main_quit]+0x0): undefined reference to `gtk_main_quit'
                        collect2.exe: error: ld returned 1 exit status
                          Ну тут явно на стадии линковки система (линкер) не видит либ. Посмотри настройки линкера в используемом тулчейне, он должен видеть каталог со своими либами... Даже скорее не он, а pkg-config. Честно говоря лень специально ставить Code::Blocks разбираться. Посмотри закладку тулчейна "Search Directories" - там во всех вложенных закладках пропиши просмотр msys32/bin и msys64/bin. Возможно поможет.
                            Добавил в Search directories Global Compiler Settings во вкладке Compiler
                            $(#gtk.LIB)
                            $(#gtk.BIN)
                            $(#gtk.BASE)
                            $(#gtk.LIB)\glade\modules
                            $(#gtk.INCLUDE)\libgladeui-2.0

                            Добавил в Search directories Global Compiler Settings во вкладке Linker
                            $(#gtk.LIB)
                            $(#gtk.BIN)
                            $(#gtk.BASE)
                            $(#gtk.LIB)\glade\modules

                            Не помогло. А как узнать, в каких библиотеках находятся функции gtk_init_abi_check и другие, на которые не найдены ссылки? Чтобы их подключить.
                              Цитата spirid1990 @
                              gtk_init_abi_check

                              Вариантов масса - можно Гугла спросить. Но я обычно запускаю бинарный поиск по файлам из Фар Менеджера и иду заваривать кофейок 8-)

                              Убедись заодно, что у тебя в среде MSYS* доступна утилита pkg-config (смотри выше по этому топику, ее обсуждали).
                              И может быть попробуй вбить реальные абсолютные пути, вместо этих "сокращенных", как вариант.
                                Я взял проект spirid, решил тоже попробовать. Нашел gtk_init_abi_check в C:\msys64\mingw64\lib в libgtk-3.a и добавил эту библиотеку в Linker settings -> Link libraries. Появилось огромное количество ошибок на отсутствующие ссылки на функции.
                                Сообщение отредактировано: tumanovalex -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0427 ]   [ 18 queries used ]   [ Generated: 10.12.22, 05:20 GMT ]