Linux下C++的编程——开发环境搭建与第一个程序

时间:2022-08-16 20:09:08

上一篇文章Linux下C++的编程——开偏介绍中我们已经介绍了GUN、GCC、G++等一些重要的概念,现在应该开始动手实践了!

开发工具的安装

环境
Distributions版本:CentOS 6.7
Linux内核片:2.6.32-573.3.1.el6.i686

一般Linux安装完之后默认就已经安装了GCC(GNU Compiler Collection),你可以查看一下gcc和g++的版本号检查gcc和g++是否已经安装。

[luowf@luoweifu ~]$ gcc -v
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
[luowf@luoweifu ~]$ g++ -v
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

如果未安装,在Linux系统链接网络的时候可通过以下命令安装开发工具集:

yum groupinstall "Development Tools"

第一个HelloWorld程序

说到程序,第一个肯定就是HelloWorld,那我们也从HelloWorld开始吧,写一个最简单的Hello程序,并编译和运行。

编写第一个程序

[luowf@luoweifu Cplusplus]$ pwd
/home/luowf/workspace/Cplusplus

//在vim中编写第一个HelloWorld程序
[luowf@luoweifu Cplusplus]$ vim HelloWorld.cpp
1 #include <iostream>
2
3 int main()
4 {
5 std::cout << "Hello Wolrd!" << std::endl;
6 return 0;
7 }

//编译程序
[luowf@luoweifu Cplusplus]$ g++ HelloWorld.cpp
[luowf@luoweifu Cplusplus]$ ls
a.out HelloWorld.cpp test1 test2
[luowf@luoweifu Cplusplus]$ ./a.out
Hello Wolrd!
[luowf@luoweifu Cplusplus]$

g++与gcc的区别

在上一篇文章中其实已经分别介绍了gcc和g++,说gcc是C的编译器,g++是C++的编译器。那是不是说gcc只能编译编译C语言,而g++只能编译C++呢?其实不是,gcc也可以编译C++程序,而C++是C的基础上发展而来的,所以g++也不可能编译不了C语言。它们之间的区别有如下几点:
1. 后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序。注意,虽然c++是c的超集,但是两者对语法的要求是有区别的,C++的语法规则更加严谨一些。
2. 编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。用gcc进行编译,在选项中加上要链接的库,也可以编译c++。如上面的HelloWorld程序我们也可以用以下的命令进行编译:

[luowf@luoweifu Cplusplus]$ gcc -lstdc++ HelloWorld.cpp
[luowf@luoweifu Cplusplus]$ ls
a.out HelloWorld.cpp test1 test2
[luowf@luoweifu Cplusplus]$ ./a.out
Hello Wolrd!
[luowf@luoweifu Cplusplus]$
  1. gcc不会定义__cplusplus宏,而g++会
    这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。

参考文章:http://www.linuxsky.org/doc/dev/200804/298.html

程序的编译及常用命令

将源代码编译成目标文件,不进行链接

gcc -c HelloWorld.cpp

在编译的时候,依据操作系统给予优化执行速度

gcc -O HelloWorld.cpp -c

将目标文件链接成二进行(可执行)文件

gcc -o HelloWorld HelloWorld.o -lstdc++

HelloWorld是可执行文件名,HelloWorld.o是目标文件名;如果是.c后缀的C源文件不用加-lstdc++,如果是.cpp后缀的C++源文件,要加-lstdc++。

在进行二进制文件制作时,将链接的函数库与相关的路径填入

(.cpp文件)gcc -lstdc++ HelloWorld.cpp

(.c文件)gcc HelloWorld.c -lm -L /usr/Lib -I /usr/include

说明:
-lm 指的是libm.so或libm.a这个函数库文件;
-L 后面接的路径是刚才上面那个函数库的搜索目录;
-I 后面的是源码内的include文件(也就是包含的math.h头文件)所在的目录;

HelloWorld.cpp代码如下:

  1 #include <iostream>
2 #include <math.h>
3
4 int main()
5 {
6 std::cout << "Hello Wolrd!" << std::endl;
7 float value = sin (3.14 / 2);
8 std::cout << "value:" << value << std::endl;
9 return 0;
10 }

将编译链接的结果输出成某个特定的文件名

gcc -lstdc++ -o HelloWorld HelloWorld.cpp

helloWorld为输出的文件名

在编译的时候,输出较多的信息说明

gcc -lstdc++ -o HelloWorld HelloWorld.cpp -Wall