Скомпилируйте gtk + & gtkmm в Vista по приглашению cmd - PullRequest
1 голос
/ 31 января 2010

Может кто-нибудь помочь мне с компиляцией gtk + (& gtkmm) в командной строке Vista cmd? Я пытался недавно и не могу заставить это работать. Я чувствую, что у меня все зависимости и пути правильные, но у меня явно нет или я что-то упускаю! Я искал в Интернете, но не нашел конкретной помощи для этого (я также пытаюсь скомпилировать в cygwin, но успешно скомпилировал и запустил простой пример helloworld gtk + в MSYS).

У меня установлен gcc через MinGW & Gtk + Win32 dev (Glade) и Gtkmm Win32. Вот некоторые примеры выводов командной строки cmd, чтобы показать возникающие проблемы:

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>gcc helloworld.c -o hellowo
rld
helloworld.c:1:21: gtk/gtk.h: No such file or directory
helloworld.c:5: error: syntax error before '*' token
helloworld.c:11: error: syntax error before "delete_event"
helloworld.c:11: error: syntax error before '*' token
helloworld.c: In function `delete_event':
helloworld.c:26: error: `TRUE' undeclared (first use in this function)
helloworld.c:26: error: (Each undeclared identifier is reported only once
helloworld.c:26: error: for each function it appears in.)
helloworld.c: At top level:
helloworld.c:30: error: syntax error before '*' token
helloworld.c: In function `main':
helloworld.c:40: error: `GtkWidget' undeclared (first use in this function)
helloworld.c:40: error: `window' undeclared (first use in this function)
helloworld.c:41: error: `button' undeclared (first use in this function)
helloworld.c:48: error: `GTK_WINDOW_TOPLEVEL' undeclared (first use in this func
tion)
helloworld.c:56: error: `NULL' undeclared (first use in this function)
helloworld.c:80: error: `gtk_widget_destroy' undeclared (first use in this funct
ion)

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>gcc helloworld.c -o hellowo
rld pkg-config --cflags --libs gtk+-2.0
gcc: pkg-config: No such file or directory
gcc: gtk+-2.0: No such file or directory
cc1.exe: error: unrecognized command line option "-fcflags"
cc1.exe: error: unrecognized command line option "-flibs"

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>gcc --v
Reading specs from C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/specs
Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --wi
th-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --dis
able-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --d
isable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --with
out-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enabl
e-hash-synchronization --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.5 (mingw-vista special r3)

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>pkg-config --version
0.23

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>which pkg-config
/cygdrive/c/Gtk+/bin/pkg-config

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld> echo %PKG_CONFIG_PATH%
C:\Gtk+\lib\pkgconfig

Правильно ли установлен pkg-config? Я использую правильный синтаксис команды компиляции? Могу ли я использовать экспресс-компилятор MS vis C (или какой-либо другой компилятор MSWindows7 SDK, как я его уже установил ?!). Я только начинающий / начинающий программист, но я хочу написать код gtk + / gtkmm для программирования GUI и хотел бы иметь возможность компилировать в командной строке cmd, а также использовать IDE для кодирования, компиляции и запуска.

Я благодарен и с нетерпением жду полезных ответов, большое спасибо

Ответы [ 5 ]

0 голосов
/ 21 февраля 2011

Я отправил соответствующее решение (для Eclipse в Windows) здесь

Это кропотливо, но работает!

0 голосов
/ 02 февраля 2010

Использование pkg-config из cmd.exe - это действительно боль, так как «нормальный» способ использовать его внутри обратных кавычек или обратных кавычек («штуковины», ASCII обратные кавычки, не называйте их «обратными слешами») в Unix стиль оболочки. Если вы настаиваете на использовании только cmd.exe, вам нужно выполнить некоторые действия cmd.exe, чтобы получить вывод pkg-config в командную строку. Или просто вручную запустите pkg-config и скопируйте / вставьте его вывод в файл .bat, который выполняет сборку.

В любом случае, важно помнить, что всякий раз, когда вы видите, к сожалению, распространенный мем запуска pkg-config с опциями --cflags и --libs одновременно (как в ответе LiraNuna выше), это в целом не будет работать в Windows.

Порядок аргументов, данных gcc (и cl, в этом отношении) , важен. Библиотеки должны идти после файлов объектов (или источников), которые ссылаются на них.

(Просто случается, что обычно в Linux и других системах на основе ELF это происходит случайным образом, поскольку исполняемые файлы там могут содержать неопределенные символы.)

Так что, если у вас есть вывод pkg-config --cflags foo в env var FOO_CFLAGS, и вывод pkg-config --libs foo в env var FOO_LIBS, правильный способ запустить gcc будет

gcc %CFLAGS% -o myprog.exe %FOO_CFLAGS% myprog.c %FOO_LIBS% %LIBS%

где CFLAGS - любые другие флаги компилятора, которые вы хотите использовать, и LIBS - любые другие библиотеки, которые вам нужны. Конечно, добавляйте больше исходных или объектных файлов по мере необходимости.

0 голосов
/ 31 января 2010
D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>gcc helloworld.c -o hellowo
rld pkg-config --cflags --libs gtk+-2.0
  1. Вам необходим вывод pkg-config как часть команды:

    gcc helloworld.c -o helloworld.exe `pkg-config --cflags --libs gtk+-2.0` 
    

    Также убедитесь, что вы установили и настроили pkg-config правильно.

  2. helloworld.c:1:21: gtk/gtk.h: No such file or directory

    Это показывает, что в пути к библиотеке нет заголовков GTK

0 голосов
/ 02 февраля 2010

Я нашел альтернативное решение на этом интернет-форуме: gtk forum -dreblen

Создание этих переменных env для pkg-config --cflags & pkg-config --libs gtk + -2.0 и объединение их с новым env var% GTK_COMPILE%, включая включение в командную строку в оболочке cmd Vista, работало и компиляция завершается, и запускается helloworld в окне .exe.

Я до сих пор не знаю, почему моя pkg-версия из каталога MinGW и моего pkg-config путь C: \ Gtk + \ lib \ pkgconfig.

Это все еще не тот ответ, который я ожидал, и я все еще чувствую, что должен быть другой (лучший / правильный) способ полностью использовать pkg-config в командной строке cmd в Vista с gtk + для успешной компиляции и запуска. Возможно, однажды я пойму это правильно!

0 голосов
/ 31 января 2010

Я очень рекомендую CMake для этой задачи. Да, я знаю, что это не то, что вы просили, но вы даже не используете make-файл. Хотя я уверен, что можно взломать какую-то команду, которая заставит ее работать, это не практично. CMake имеет встроенные модули для генерации make-файлов и поиска библиотек gtkmm в нужных вам окнах. Он может даже генерировать проекты MSVC или make-файлы mingw / msys.
Тем не менее, если вы настаиваете на том, чтобы идти сложным путем, запустите pkg-config для файла gtkmm.pc с параметром --cflags и скопируйте и вставьте вывод в файл .bat. Я не знаю другого способа встраивания pkg-config в командную строку Windows. (Я действительно однажды так и сделал, это сработало)
А если серьезно, cmake был разработан для решения проблемы, и это FOSS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...