标签:
上一篇文章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开始吧,写一个最简单的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]$
在上一篇文章中其实已经分别介绍了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]$
参考文章: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
标签:
原文地址:http://blog.csdn.net/luoweifu/article/details/50197913