在具体的操作之前,首先需要安装一些必要的软件。
ubuntu下默认安装了gcc,不过缺少必要的Header file,可以在命令行中输入下面的指令安装build-essential套件:
sudo apt-get install build-essential
使用GTK+2.0需要安装GTK开发套件,在命令行中输入下面的指令安装GTK开发套件libgtk2.0-dev:
sudo apt-get install libgtk2.0-dev
安装完成后,可以使用pkg-config查看一下GTK的相关编译环境信息:
pkg-config --cflags --libs gtk+-2.0
ubuntu安装code::blocks可以在命令行中输入如下指令来完成:
sudo apt-get install codeblocks

程序helloworld.c演示了如何开启一个桌面的窗口程序。

#include <gtk/gtk.h>
int main(int args, char *argv[]) {
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
gtk_main();
return ;
}

helloworld.c

我们可以在命令行输入如下信息来编译该程序:
gcc -o helloworld helloworld.c `pkg-config --cflags --libs gtk+-2.0`
在命令行输入如下命令将会看到出现了一个窗口:
./helloworld

在code::blocks中创建一个Empty Project(在这里我给项目取名为"HelloWorld"),在项目中新建一个main.c文件,其中的内容和上面的helloworld.c文件的内容是一样的。此时运行HelloWorld项目并不能正常运行,在Build messages中会提示如下错误:
fatal error: gtk/gtk.h: No such file or directory
这是因为我们没有像之前编译helloworld.c程序时提供必要的参数`pkg-config --cflags --libs gtk+-2.0`。
打开项目所在目录下的HelloWorld.cbp文件(这个文件类似makefile,里面包含了项目相关的一些配置信息),在project项的compiler项中添加
<Add option="`pkg-config gtk+-2.0 --cflags`" />
在project项中添加Linker项
<Linker>
    <Add option="`pkg-config gtk+-2.0 --libs`" />
</Linker>
再次运行Helloworld项目,能够得到之前手工编译运行helloworld.c相同的一个窗口。
完整的HelloWorld.cbp代码(添加GTK参数后):

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="HelloWorld" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/HelloWorld" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/HelloWorld" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="`pkg-config gtk+-2.0 --cflags`" />
<Add option="-Wall" />
</Compiler>
<Linker>
<Add option="`pkg-config gtk+-2.0 --libs`" />
</Linker>
<Unit filename="main.c">
<Option compilerVar="CC" />
</Unit>
<Extensions>
<code_completion />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>

HelloWorld.cbp

学习资料:
Ubuntu 下安裝 GTK http://openhome.cc/Gossip/GTKGossip/GTKUnderUbuntu.html
编程语言:gtk程序设计简介 http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=编程语言:gtk程序设计简介
GTK+2.0教程 http://runmediaprocess.googlecode.com/svn/trunk/dataBase/界面UI开发/GTK/GTK_2.0_Tutorial(中文版).pdf

ubuntu下code::blocks编译运行一个简单的gtk+2.0项目的更多相关文章

  1. ubuntu下使用code::blocks编译运行一个简单的gtk+2.0项目

    在具体的操作之前,首先需要安装一些必要的软件.ubuntu下默认安装了gcc,不过缺少必要的Header file,可以在命令行中输入下面的指令安装build-essential套件:sudo apt ...

  2. ubuntu下code::blocks设置运行窗口为gnome命令行

    code::blocks编译运行C++程序(F9)默认出现的运行串口在有鼠标的情况下进行粘贴还是很方便的,只要按下鼠标滑轮,位与剪切板中的数据就能粘贴到运行串口中.但是对于用笔记本而且没有鼠标地童鞋这 ...

  3. ubuntu15.10下code::blocks设置运行窗口为gnome命令行

    code::blocks编译运行C++程序(F9)默认出现的运行串口在有鼠标的情况下进行粘贴还是很方便的,只要按下鼠标滑轮,位与剪切板中的数据就能粘贴到运行串口中. 但是对于用笔记本而且没有鼠标地童鞋 ...

  4. Ubuntu下Code::Blocks无法编译 /bin/sh: 1: g++ not found 解决办法

    Linux下Code::Blocks无法编译运行提示 /bin/sh: 1: g++ not found 的解决办法 今天在Ubuntu 12.04 软件中心中选装了Code::Blocks,安装完成 ...

  5. JNI 在Android Studio利用NDK编译运行一个简单的c库

    NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些.如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配置Cygwin ...

  6. Ubuntu下编辑并编译运行c++程序

    一.使用vim编辑c++代码: vim hello.cpp 输入如下代码: #include <iostream> using namespace std; int main() { co ...

  7. ubuntu下code::blocks+opengl的使用与配置

    操作系统:Ubuntu 15.04 gcc version 4.9.2 opengl安装 sudo apt-get install build-essential libgl1-mesa-dev li ...

  8. ubuntu下cmake自动化编译的一个例子

    一个CMakeLists.txt的例子参考:https://www.hahack.com/codes/cmake/https://blog.csdn.net/afei__/article/detail ...

  9. ubuntu 下gcc的编译运行

    一些基本的操作 $gcc test.c //将test.c预处理.汇编.编译并链接形成可执行文件test $gcc test.c -o test //-o用来指定输出文件的文件名 $gcc -E te ...

随机推荐

  1. mysql 2013错误解决

    今天,莫名其妙的来了个mysql 2013错误,导致无法登陆mysql gui工具,而且dos也进不去,提示ping 127.0.0.1,百度+google后: 这是在使用 mysql 的过程中,困扰 ...

  2. USB 之传输编码格式 NRZI 介绍

    记录NRZI (Non-Return-to-Zero Inerted code) 非归零翻转编码,之前,我先稍微记录一下他的前身. RZ 编码(Return- to - zero coding) RZ ...

  3. SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题

    自定义Spring MVC3的参数映射和返回值映射 + fastjson 自定义Spring MVC3的参数映射和返回值映射 + fastjson首先说一下场景:在一些富客户端Web应用程序中我们会有 ...

  4. Server 2008作为打印服务器的四大错误解决方案

    http://os.51cto.com/art/201004/197322.htm http://os.51cto.com/art/201004/197322_1.htm http://os.51ct ...

  5. win10系统中UserManager 总是被禁用怎么解决?

    RT,也就是提示win10开始菜单和cortana无法工作.升级win10后一直被这个问题困扰,论坛也见有人发帖求助这类问题,百度了方法打开任务管理器进入服务更改User Manager启动类型为自动 ...

  6. WPF教程三:布局之WrapPanel面板

    WrapPanel:环绕面板 WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够时就会自动调整进行换行,后续排序按照从上至下或从右至左的顺序进行. Orientatio ...

  7. java-jdbc循环设置sql参数

    PreparedStatement sta=null; Connection conn=null; @Test public void Test2() { //获取连接池 ComboPooledDat ...

  8. 可能是目前最完整的前端框架 Vue.js 全面介绍

    Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架. 摘要 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angul ...

  9. 何为中间语言IL?

    一直以来,对于.NET与C#之间的关系我都存在着疑惑,为此,今天专门仔细看了一下以前最容易忽略掉的书本“前言”部分,予以澄清:) 首先,c#的结构和方法论反映了.NET的基础方法论,在很多情况下,c# ...

  10. 关于Cocos2d-x中让主角运动的方法

    比如要让角色跳起来 1.如果是用到物理引擎,那么在物理世界中,可以用 hero->getPhysicsBody()->setVelocity(Vec2(0, 400));  //给主角一个 ...