在具体的操作之前,首先需要安装一些必要的软件。
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. 7款基于jquery的动画搜索框

    无论是电商网站,还是媒体网,还是个人博客,每个网站都有属于自己个性化的搜索框.今天小编给大家带来7款基于jquery的动画搜索框.每个搜索框都采用了动画效果,一起看下效果图吧. 在线预览   源码下载 ...

  2. uWSGI的stats注释,送给需要的人,欢迎指正

    吐槽先,对于uWSGI状态信息没有文档说明这样一个现实,我只想说一句:F*CK YOU!!! 花了2天时间,累得眼珠子疼,针对这鬼畜的stats,借助Total Commander和VS大概撸了一边u ...

  3. LNMP环境下SendMail+OpenWebMail的详细配置

    随着网络的发展和普及,邮件服务器正在成为人们日常生活中不可缺少的部分.现在,许多企业采用 Lotus Note, Exchange 作为公司内部的邮件服务器.本文主要介绍一种基于Linux系统的邮件服 ...

  4. MySql 生成日期随机数

    select DATE_ADD(sd, INTERVAL FLOOR(1+ RAND() * ((ABS(UNIX_TIMESTAMP(ed) - UNIX_TIMESTAMP(sd))) - 1)) ...

  5. javascript总述

    一.JavaScript核心 一个完整的JavaScript应该由下列三个不同的部分组成. 1.核心(ECMAScript) 2.文档对象模型(DOM,Document Object Model) 3 ...

  6. DateTime获取一个月的第一天和最后一天

    DateTime dtTarget = DateTime.Now; DateTime FirstDay = dtTarget.AddDays(-DateTime.Now.Day + ); DateTi ...

  7. Entity Framework应用:使用Code First模式管理事务

    一.什么是事务 处理以数据为中心的应用时,另一个重要的话题是事务管理.ADO.NET为事务管理提供了一个非常干净和有效的API.因为EF运行在ADO.NET之上,所以EF可以使用ADO.NET的事务管 ...

  8. JQuery 获得元素的方法

    获取一个元素的值可以有很多方式:<input type="text" id="txt" class="ipt" name=" ...

  9. Android isUserAMonkey()

    Monkey是Android上的一个自动化测试工具.产生随机事件由于压力测试等. ActivityManager.isUserAMonkey()判断当前是否有运行的Monkey测试.有就返回true. ...

  10. e660. 用一组像素创建图像

    This example demonstrates how to convert a byte array of pixel values that are indices to a color ta ...