如何在Linux上用GCC编译C和Gtk +?

时间:2013-02-18 20:36:42

标签: c linux gcc compilation gtk

我搜索过并搜索过但我没有得到我真正想要的信息。有人可以尽可能完整地从根本上解释在Linux上使用GCC在C语言中编写Gtk +代码的过程。有些东西,比如反引号,“c99”和.o文件,我根本就不懂。

我也非常感谢学习Gtk +代码的任何资源。我发现的所有资源都是版本2.x,但我认为3.6是当前版本。

我想重申一下,我只对C代码感兴趣。请不要尝试向我解释C ++或C#的好处,我已经阅读了所有这些内容。我来这里是为了C.谢谢!

5 个答案:

答案 0 :(得分:16)

对于初学者,你编写你的C代码,比如“hello_world_gtk.c”,然后使用适当的编译器和链接器标志编译并链接它与Gtk。这些标志由pkg-config工具提供给您。要获取所需的编译器标志,请使用以下命令调用该工具:

pkg-config gtk+-2.0 --cflags

对于链接标志:

pkg-config gtk+-2.0 --libs

反引号允许您从pkg-config获取输出并将其作为参数传递给gcc:

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

但你不需要使用反引号。如果需要,您可以手动复制和粘贴标记。

对于Gtk 3,将“2.0”替换为“3.0”。如果pkg-config报告找不到该软件包,那么您没有安装Linux发行版提供的Gtk开发包。

如果您通常不了解如何将某些内容编译成目标文件然后将其链接起来,那么您不应该从Gtk开始,而应该使用普通的C语言。一旦熟悉了编译和链接的绝对基础知识,就可以继续使用Gtk应用程序了。

答案 1 :(得分:2)

正如其他人所说,你的问题过于宽泛。它询问反引号(基本shell语法),什么是“.o”文件(基本编程)和GTK编程(稍微高级编程)。

但要尽可能地回答它,假设您只有一个源文件,请使用

gcc -Wall -Wextra -std=c99 `pkg-config --cflags --libs gtk+-2.0` example.c -o example

其中“example.c”是您的来源名称。这是细分:

  • 使用标记“-Wall”和“-Wextra”,这样您就可以看到所有警告(并修复它们)。

  • 使用“std”标志设置C方言。有几个,gcc对大多数人有全部或部分支持。阅读手册页或信息页面以获取更多信息。像上面这样使用“c99”并不是一个糟糕的选择。

  • 并使用pkg-config和命令替换(即反引号)来设置库和包含。请注意,您可以同时执行这两项操作,但很多人会使用两次重写的pkg-config两次。反引号替换了滴答内命令的输出。尝试在命令行中单独在反引号中运行pkg-config,你会看到它的作用。

不幸的是,3.x GTK代码的资源并不多,而且大多数资源仍然是基于2.x.您只需要使用gtk邮件列表或参考手册。

对于GTK 3.x,您无法编译的原因很可能是您的发行版基于GTK 2.x。较新的发行版可能在其回购中有GTK 3.x.

答案 2 :(得分:1)

来自Gtk文档Getting Started页面:

gcc `pkg-config --cflags gtk+-3.0` -o example example.c `pkg-config --libs gtk+-3.0`

同时检查Nikos C.'s Aswer以了解有关pkg-config的更多信息。

答案 3 :(得分:0)

我的Makefile

LDLIBS = -lcurl -lpthread `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`

答案 4 :(得分:0)

通过gtk2.0示例:

$gcc test.c -o gnometest $(pkg-config --cflags --libs gtk+-2.0)

通过gtk3.0示例:

$gcc $(pkg-config --cflags gtk+-3.) test.c -o gnometest $(pkg-config --libs gtk+-3.0)