gcc,cc,g++,CC的区别

***gcc是C编译器;

***g++是C++编译器;

***linux下cc一般是一个符号连接,指向gcc

***gcc说明

1.gcc编译常用格式:

    gcc  C源文件 -o 目标文件

    gcc -o 目标文件  C源文件

    gcc C源文件

最后一种情况产生的目标文件默认为a.out

2.gcc总体参数

-c  只是编译不链接,生成目标文件

-S  只是编译不汇编,生成汇编代码

-E  只进行预编译

-g 在可执行文件中包含调试信息(与下一篇的必须命令)

-o file 把输出文件输出到file中

-v 显示gcc的版本信息

-I dir 在头文件的搜索路径中添加dir目录

-L dir 在库文件的路径列表中添加dir目录

-static 链接静态库

-library 连接名问library的库文件

3.gcc生成库流程

gcc指令的一般格式如下:

gcc [参数] 要编译的文件 [参数]  [目标文件]

gcc编译流程:

源代码(.c)->预处理(Pre-Processing)->编译(Compiling)->汇编(Assembing)->链接(Linking)->可执行文件

具体命令如下:

c文件用gcc的"-E"参数预处理,生成预处理“.i”文件,用gcc的“-S”参数编译,生成汇编“.s"文件,再用gcc的”-c“参数汇编,生成二进制”.o“文件,最后再用一次gcc把”.o“文件和一些链接库文件链接成可执行文件。

我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:

例:

gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib

多个文件合并创造一个程序时,就要再-o后,写上多个文件的文件名

例:

 gcc -o json cJSON.c test.c

GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名

1。gcc包含的c/c++编译器
gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什
么意思:))一般c程序就用gcc编译,c++程序就用g++编译

2。gcc的基本用法
gcc test.c这样将编译出一个名为a.out的程序
gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名


3。为什么会出现undefined reference to 'xxxxx'错误?
首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本
身没有问题,是你用编译器编译时参数用得不对,你没

有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译
参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。

4。-l参数和-L参数
-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文
件名有什么关系呢?
就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的
头lib和尾.so去掉就是库名了。

好了现在我们知道怎么得到库名了,比如我们自已要用到一个第三方提供的库名字叫lib
test.so,那么我们只要把libtest.so拷贝到/usr/lib

里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里
的函数,我们还需要与libtest.so配套的头文件)。

放在/lib/usr/lib/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件
没放在这三个目录里,而是放在其他目录里,这时我们
原文地址:https://www.cnblogs.com/orangezs/p/8378737.html