C++是一个功能强大而又应用广泛的计算机语言,就应用领域而言,几乎无所不在,因为有操作系统的地方就会有C++的存在,热门程序而言,也就仅次于C和Java.而C与C++又有天然的血缘关系。
从事C++开发近两年,虽然开发的产品都是跨平台的,但个人直接接触到的编程工程还是更偏重于Windows平台(至少开发环境更多的是在Windows平台,还写过“带你玩转Visual Studio”系列的博文),而现在要自己独立地带领一个项目的开发,还是一个跨平台的项目,也就有必要到Linux下C++的编程有一个进行一个系统的学习和了解。
本系列记录自己在Linux平台下学习C++的一些总结和心得。希望与大家一起学习与成长!
在进行Linux下C++编程之前,先来了解几个重要的工具和概念:
GUN
在Linux下进行编程,GNU是你永远绕不开的一个概念,因为你处处都可以看到它,那它是一个什么东西呢?
GNU是GNU’s Not Unix的缩写,意思是GNU并不是Unix。那它是什么呢?其实它有多个含义:
GUN项目
1984年,史托曼(Richard Stallman)开始GNU项目,这个项目的目的是创建一个*、开放的UNIX操作系统(Free Unix)。但是建立一个操作系统谈何容易啊!而且在当时的 GNU 是仅有史托曼一个人单打独斗的,这实在太麻烦,但又不能放弃这个计划。于是史托曼反其道而行之:“既然操作系统太复杂, 我就先写可以在 Unix 上面运行的小程序,这总可以了吧?”基于这个想法, 史托曼便开始参考Unix上的现有软件,并依据这些软件的作用开发出具有相同功能的软件,并将其开源。后来越来越多的人知道免费好用的GUN软件,并且与付费的专利的性能差不了多少,使用GUN软件的人就越来多,GNU项目也逐步打开知名度。
为了这个计划,他开始使用原本Unix上面跑的软件,并自行撰写功能与Unix原有专利软件相仿的软件。但不论是什么软件,都得要进行编译成为二进制档案(binary file)后才能够执行,因此他便开始撰写C语言的编译器,那就是现在相当有名的GNU C(gcc)!这个点相当的重要!这是因为C语言编译器版本众多,但都是专利软件,如果他写的C编译器够棒,效能够佳,那么将会大大的让GNU计划出现在众人眼前!
GUN*软件协议
GPL协议指的是通用公共许可证(General Public License, GPL)。由于GNU项目开发的软件都是开放源代码的*软件,这就有可能被他人盗用并对它进行注册而成为专利软件。为解决这个问题,1985年史托曼与律师草拟了有名的通用公共许可协议,你可以在GNU软件源码的每一个文件(如.h、.cpp)开头看到这个协议的声明,如:
/*
* Copyright (C) 2004-2010 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
GPL协议的详细内容见http://www.gnu.org/licenses/gpl-3.0.en.html
关于GPL协议的几点说明如下:
你可以——
取得软件源码:你可以根据自己的需求执行GPL协议的*软件;
复制:你可以*复制该软件;
修改:你可以将取得的源码进行程序的修改,使之适合自己的工作;
再发行:你可以将你修改过的程序再度*发行,而不会与原有的编写者冲突;
回馈:你可以你修改过的程序回馈于社会!
你不能——
修改授权:你不能将一个GPL授权的*软件在你修改后将它取消GPL授权;
单纯销售:你不能单纯销售*软件;
GUN开发的*软件
前面说到史托曼开始GNU项目进行开发大量的*软件,随着这些软件的成功开发和广泛使用,GNU的熟知度也越来越广。现在被广泛使用的知名的*软件有:
Emacs
GCC(GNU Compiler Collection C程序编译器)、G++(C++编译器)
GUN C Library(GLIBC)
Bash Shell
GCC与G++
首先GCC是the GNU Compiler Collection的意思,是GNU的一个编译器集合,里面包含了多种编译器及相关工具,如gcc、g++。GCC是多种主要编程语言编译器的整合(或叫集成)发布。这些编程语言目前包含C, C++, Objective-C, Objective-C++, Java, Fortran和Ada。参见Using the GNU Compiler Collection
gcc是GNU的C编译器(GNU C Compiler),是GNU Compiler Collection的一部分;
g++是GNU的C++编译器(GNU C++ Compiler),也是GNU Compiler Collection的一部分;
GDB
GDB是GNU Project的一个调试程序(GNU Debugger), 允许你查看一个程序执行时内部的具体执行逻辑,或当它崩溃时这个程序执行了什么。
GDB可以做四个主要的事情(及它所支持的其它功能)以帮助你发现程序的bug:
1. 开始一个程序,指定任何可能影响它行为的事情;
2. 让你的程序以指定的条件暂停;
3. 当程序停止时检查发生了什么;
4. 改变你程序中的变量或数据,以便你试验导致你程序bug的影响因素,并了解更多其它的信息。
GDB可以调试以下编程语言编写的程序:Ada、C、C++、Objective-C、Pascal等,这些程序可能执行在相同的机器上(本地调试),也可能执行在不同的机器中(远程调试),GDB可以运行在最爱欢迎的Unix和Microsoft Windows上。
参考阅读:The GNU Project Debugger
Makefile
Makefile是程序编译的规则,makefile记录着整个工程的编译规则(如源文件的编译顺序、依赖关系等),通过make工具进行编译。make根据makefile定义的规则将源代码编译成二进行文件。在跨平台(特别是类Unix系统中)的程序中,一般都会通过makefile来进行编译。
下一篇要讲述的内容:
Linux下C++的编程——开发环境搭建与第一个程序