为什么g ++不能编译简单的GTK程序?

时间:2013-12-31 21:57:05

标签: c++ c g++ wxwidgets gtk3

这些天我开始自学一些C ++,我决定在此期间学习一些GUI编程。事实是,它只是不会编译,使用GTK(Windows捆绑3.6.4)或wxWidgets(3.0.0)。我得到的错误与两者相似,所以我坚持使用GTK +来解决这个问题。

5天后(7次重新编译wx,很多教程,SO问题和谷歌),这就是我试图编译code的方式(我是在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 +都很陌生,我已经看过this了,但由于它没有解决我的问题,因为声誉而无法发表评论,我以为我必须打开一个新问题。

另外,我将编译器更改为TDM-GCC,因为我无法使用MinGW编译wx。这有点相关吗?我在这里缺少什么?

提前感谢您的帮助。

编辑:很抱歉,刚才意识到样本是用C语言编写的,而不是C ++语言。我现在正在添加标签。 (但是,错误与我用于wx的C ++代码相同,所以我保留了C ++标记。)

1 个答案:

答案 0 :(得分:2)

这不是gcc问题。这是脚本/ shell / bash /环境问题。

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

这一行表示'gcc'看到了$(pkg-config所在的文件名; Linux应用程序希望通过调用它们的shell为它们完成命令行替换。

这意味着shell不会消耗$(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文件更改为invoke:

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

如果它不起作用,请启动bash并参考$ {TMP} /gtkcc.log,否则你可以注释掉回声线。