环境
刚装好的系统中已经有GCC了,但是这个GCC几乎什么文件都不能编译,因为缺少一些必须的头文件,所以要安装build-essential这个软件包输入下面命令:
sudo apt-get install build-essential
eclipse CDT
#apt-get install eclipse-cdt
CodeBlocks、CodeLite、Qt跨平台
kdevelop
sudo apt-get install kdevelop
make是用来完成自动编译的工具
gcc/g++/gcc port/g++ port
在Linux系统中开发C、C++语言程序,可选择的集成开发环境有Eclipse和Kdevelop,分别运行在GNOME和KDE桌面环境。
进程
fork
线程
POSIX标准线程库,Pthread线程对应的函数库为libpthread.
网络
OSI参考模型
TCP/IP模型
Socket
网络库
- libcurl url
- libESMTP SMTP
- libspopc POP
- mailutils IMAP
- libpurple或Telepathy 即时通讯
数据库
Berkley与PostgreSQL
SQLite
MySQL
Oracle 库:OCI,Libsqlora8
通用数据库接口数据库:SQL Relay
数据库连接池:unixODBC
界面
桌面环境
GNOME
工作站
开发界面函数库:GTK+、X11、Cairo
Glib库是GTK+和GNOME工程的基础低层核心程序库。
GLib为C语言提供面向对象的GObject对象系统。
KDE
服务器
KDE桌面核心为Qt程序库。
Xfce
图形客户端
HILDON
移动设备
HILDON是GNOME的裁切版
2D图形引擎Cairo
支持PDF格式
GStreamer
可处理MP3、RM、WMA、MPEG、MPEG2、AVI和Quicktime等多种格式的多媒体数据。
搭建GTK+开发环境
DEB:
apt-get install gnome-core-devel
//安装libgtk2.0-dev libglib2.0-dev等开发相关的函数库文件
apt-get install devhelp//安装开发帮助文档查看程序
apt-get install libglib2.0-doc libgtk2.0-doc
//安装GTK/GLIB的API参考手册及其他帮助文档
apt-get install libgtk2.0*//安装GTK+2所需的所有文件
YUM:
yum install devhelp
yum install gtk2-devel//安装GTK+2所需的开发文件
需要:
- pkg-config
- GLib
- libpng
- JPEG
- libtiff
- ATK
- Cairo
- Pango
- GTK+
所见即所得工具Glade
界面构件开发
GtkWidget
- 基本构件
- GtkButton
- 调整对象,由GtkObject派生。
- 范围构件,包括滚动条与比例构件
- 标签构件
- 箭头构件,上下左右箭头
- 工具提示对象
- 进度条
- 对话框
- 标尺
- 状态栏
- 文本输入构件
- 微调按钮
- 组合输入框
- 日历
- 颜色选择
- 文件选择
- 复合构件
- 快捷标签
- 绘图区
- 字体选择对话框
- 消息对话框
- 图像构件
- 文本视区
- 菜单构件
- 菜单栏
- 菜单构件
- 菜单项
- 图形菜单项
- 复合菜单项
- 单菜单项
- 分隔菜单项
RC文件,是用来定义界面构件的字体、颜色和背景图等样式风格的配置文件。
界面布局
- 窗体构件-GtkWindow
- 组装盒构件-GtkVBox与GtkHBox
- 表构件-GtkTabel
- 容器构件-GtkContainer
- 事件盒-GtkEventBox
- 对齐构件-GtkAlignment
- 固定容器-GtkFixed
- 布局容器-GtkLayout
- 框架构件-GtkFrame
- 比例框架-GtkAspectFrame
- 分栏窗体构件-GtkPaned
- 视角构件-GtkViewport
- 滚动条窗体-GtkScrolledWindow
- 按钮盒-GtkButtonBox
- 工具栏构件-GtkToolbar
- 工具项构件-GtkToolItem
- GtkToolButton
- GtkSeparatorToolItem
- 工具项构件-GtkToolItem
- 笔记本构件(选项卡)-GtkNotebook
信号与事件
g_signal_connect()
g_signal_handler_disconnect()
g_signal_connect_after()
g_signal_connect_swapped()
g_signal_handler_disconnect_by_func()
Glade
Glade所设计的界面以XML格式保存。
安装:
apt-get install glade
Glade项目文件是一个单独的.glade文件,可通过GTK+库将该文件添加到C语言源代码种。
#include <qtk/gtk.h>
#include <qlib-2.0/glib.h>
#include <libglade-2.0/glade/glade.h> //包含libglade函数库
int main (int argc, char *argv[])
{
gtk_init(&argc, &argv); //初始化GTK+库
GtkBuilder *ui; //声明GtkBuilder类型变量
GtkWidget *window; //声明GtkWidget类型变量
ui = gtk_builder_new(); //初始化GTKBuilder环境
gtk_builder_add_from_file(ui, "ui.glade", NULL); //读取qlade文件
GtkWidget *window; //声明GtkWidget类型变量
window = GTK_WIDGET (gtk_builder_get_object (gtkBuilder, "MainWindow")); //从GtkBuilder对象获得GtkWidget界面构件
GtkWidget *label;
label = GTK_WIDGET (gtk_builder_get_object (gtkBuilder, "label"));
gtk_label_set_label (GTK_LABEL (label), "Hello World!"); //修改界面构件的属性
gtk_widget_show_all (window); //显示window内的所有构件,
gtk_builder_connect_signals (ui, NULL); //连接GtkBuilder对象所有己定义信号
gtk_main (); //开始GTK+主循环
return 0;
}
在编译参数中加入编译参数pkg-config --cflags --llibs gtk+-3.0
-export -dynamic,编译该程序。
国际化与本地化
po文件意为可移植对象;mo文件意为机器对象。
在包含Glade项目文件的目录中创建名为po的目录,进入po目录,创建POTFILES.in新文件。打开文件,输入Glade项目文件的文件名后保存,如:
ui.glade
安装inttool工具集,其中包含gettext软件包。
apt-get install intltool
安装后,将工作目录设置为POTFILES.in文件的目录。输入下列命令创建po文件:
intltool-update --pot gettext-package=ui
gettext-package参数的名称为Glade项目文件的前缀名。命令执行成功创建untitled.pot文件,该文件是po文件的模版。复制改文件,创建名为zh_CH.po的副本。打开,将charset=CHARSET改为utf-8,将msgid后的英文字符串翻译到下一行的msgstr后。
将po文件编译为mo文件:
msgfmt zh_CH.po
在po中创建zh_CH/LC_MESSAGES目录,复制zh_CH.mo到新建立的目录,改名为ui.mo
#include <gtk/qtk.h>
#include <glib-2.0/glib.h>
#include <libinti.h> //提供gettext支持
#define (String) gettext(String) //翻译字符串
#define N (String) String#define PACKAGE "ui" //定义mo文件前缀名
#define LOCALEDIR "./po" //定义mo文件搜索路径
int main (int argc, char *argv[])
{
setlocale (LC ALL, ""); //设置本地语言和字符集
bindtextdomain (PACKAGE, LOCALEDIR); //设置mo文件的路径
textdomain (PACKAGE); //设置mo文件前缀名
gtk_init (&argc, &argv);
GtkBuilder *ui;
ui = qtk_builder_new ();
qtk_builder_add_from_file (ui, "ui.glade", NULL);
GtkWidget *window;
window = GTK_WIDGET (gtk_builder_get_object (ui, "User Information"));
gtk_widget_show_all (window); //显示window内的所有构件,
gtk_builder_connect_signals (ui, NULL); //连接GtkBuilder对象所有己定义信号
gtk_main (); //开始GTK+主循环
return 0;
}
修改环境变量:
单个用户:用户主目录下的.profile文件;所有用户:/etc目录下的environment文件
实战
libid3dtag可以很容易读取mp3文件信息。
版本控制
linux可使用CVS版本控制工具。
CVS服务器配置
安装
apt-get install cvs cvsd
配置
dpkg-reconfigure cvsd
建立代码仓库
cd /var/cvsroot //进入虚拟系统目录
sudo mkdir mycvs //建立代码仓库文件夹
初始化代码仓库
sudo cvs -d /var/lib/cvsd init
改变目录权限
sudo chown cvsd:cvsd -R /var/lib/cvsd/cvsrepo
修改用户密码
sudo cvsd-passwd /var/cvsroot/mycvs cvsd //修改文件夹所有者密码
修改认证方式
sudo vi /var/cvsroot/mycvs/CVSROOT/config //在配置文件中将“SystemAuto=no”前面的#号去掉
重启服务
/etc/init.d/cvsd restart
配置环境变量
export CVSROOT=:pserver:cvsd@localhost:/mycvs
登录服务器
cvs login
CVS服务器管理
查看当前仓库中的模块名称
ls $CVSROOT
导入
cd /home/mp3player
cvs import -m "MP3 Player Test" mp3player me start
签出
cvs co mp3player
签入
cvs commit
添加和删除
cvs add test .c
cvs commit
cvs rm test.c
cvs commit
历史
cvs history -c interface.c
冲突解决
svs update
标记
cvs tag release
分支
cvs rtag -b release mp3player
远程访问
export CVS_RSH=ssh
export CVSROOT=<用户名>@<服务器地址>:<端口号><CVS资源目录路径>
export CVSROOT=:pserver:<用户名>@<服务器地址>:<端口号><CVS资源目录路径>
学习:
- 开源世界旅行手册
- 理解Linux进程
- Linux C编程一站式学习
- 100-gcc-tips
- Ubuntu 中文 Wiki
- Ubuntu 中文 Wiki-编程语言
- gcc
- 用GDB调试程序
- Gtk与Qt编译环境安装与配置
- 跟我一起写Makefile
- 编译打包