Почему g ++ не скомпилирует простую программу GTK?

0

В эти выходные я начинаю немного учиться C++, и в то же время я решил изучить некоторые программы графического интерфейса. Дело в том, что он просто не будет компилироваться, используя GTK (пакет Windows 3.6.4) или wxWidgets (3.0.0). Ошибка, которую я получаю, аналогична для обоих, поэтому я придерживаюсь GTK+ для этого вопроса.

Через 5 дней (7 перекомпиляций wx, много учебников, вопросов SO и google), вот как я пытаюсь скомпилировать код (я под Windows 7, 64 бита, и это не вариант для переключения на Linux справа Теперь):

@echo off

set cygpath=C:\Cygwin\bin
set filename=simple

%cygpath%\bash.exe -c "gcc $(pkg-config --cflags gtk+-3.0) -o %filename% %filename%.c $(pkg-config --libs gtk+-3.0)"

echo.
pause

Но единственным результатом я получаю это (backtilts вместо $() возвращает то же самое):

: Invalid argument
: Invalid argument

Я попробовал то же самое без Cygwin, но результаты были:

gcc: error: $(pkg-config: No such file or directory
gcc: error: gtk+-3.0): No such file or directory
gcc: error: $(pkg-config: No such file or directory
gcc: error: gtk+-3.0): No such file or directory
gcc: error: unrecognized command line option '--cflags'
gcc: error: unrecognized command line option '--libs'

Использование цитат или двойных кавычек вообще не помогло. Я пробовал все это в командной строке cygwin-bash или Windwos

Я совершенно не знаком с C++, wxWidgets и GTK+, и я уже это видел, но так как это не решило мою проблему, и я не могу комментировать из-за репутации, мне показалось, что мне нужно открыть новый вопрос.

Кроме того, я сменил компилятор на TDM-GCC, потому что не смог скомпилировать wx с MinGW. Это связано? Что мне здесь не хватает?

Заранее благодарю за любую помощь.

EDIT: Извините, просто понял, что образец был написан на C, а не C++. Я добавляю тег сейчас. (Тем не менее, ошибка совпадает с кодом C++, который я использую для wx, поэтому я сохраняю тег C++.)

  • 0
    Кажется, что cmd.exe не выполняет подстановку встроенных переменных в строках. (Гуру Windows, пожалуйста, подтвердите или опровергните это.)
  • 0
    @ H2CO2: Да, он заменяет переменные в строках. За исключением переменных в cmd пишется %LIKE_THIS% не $(LIKE_THIS) .
Показать ещё 12 комментариев
Теги:
g++
wxwidgets
gtk3

1 ответ

2
Лучший ответ

Это НЕ проблема gcc. Это проблема сценариев/оболочки /bash/environment.

gcc: error: $(pkg-config: No such file or directory

Эта строка означает, что "gcc" видел $(pkg-config где ожидалось имя файла; приложения Linux ожидали, что подстановка командной строки была сделана для них оболочкой, вызывающей их.

Это означает, что оболочка не потребляла $(pkg-config --cflags gtk+-3.0) и выполняла подстановку на ней.

Вы можете попробовать создать скрипт bash, gtkcc.sh, который сделает это для вас и вставляет соответствующие параметры в соответствующие места.

#!/bin/bash

# usage: gtkcc.sh <filename>
filename="$1"; shift
if [ -z "${filename}" ]; then echo "Usage: $0 <filename>"; exit 255; fi
if [ ! -f "${filename}.c" ]; then echo "Cannot find ${filename}.c"; exit 255; fi

gtkCFLAGS="$(pkg-config --cflags gtk+-3.0)"
gtkLDFLAGS="$(pkg-config --libs gtk+-3.0)"

cmd="gcc ${gtkCFLAGS} -o \"${filename}\" \"${filename}.c\" ${gtkLDFLAGS}"
echo $cmd >${TMP}/gtkcc.log
eval $cmd

Сохранить как gtkcc.sh или gtkcc, chmod a+rx gtkcc.sh

Измените файл bat, чтобы вызвать:

%cygpath%\bash.exe gtkcc.sh %filename%

Если это не сработает, запустите bash и обратитесь к $ {TMP}/gtkcc.log, иначе вы можете прокомментировать эхо-строку.

  • 0
    Ошибка, на которую вы ссылаетесь, отображается только тогда, когда я вызываю gcc из оконного терминала. При использовании Cygwin's bash ошибка : Invalid argument . Я также попробовал ваше предложение, и оно не сработало, выдавая теперь : No such file or directoryash gtkcc.sh: line 2: $'\r': command not found gtkcc.sh: line 4: $'shift\r': command not found gtkcc.sh: line 14: syntax error: unexpected end of file
  • 0
    Это означает, что у вас есть конец строки Windows в файле .sh и bash раздражает символ. Вам необходимо конвертировать в dos2unix gtkcc.sh файла Unix файл dos2unix gtkcc.sh . stackoverflow.com/questions/11616835/… Другим вариантом может стать привычка использовать что-то вроде Notepad ++ (который позволит вам указать режим окончания строки), а не блокнот.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню