Linux学习(C语言学习之Gcc)

言之者无罪,闻之者足以戒。 ——《诗序》
Linux的学习需要对C语言有一个透彻性的了解,需要有非常好的C语言基础,Gcc是Linux中的C文件的一个编译器(当然也不只局限于C文件)。
Gcc最初的全名是GNU C Compiler
随着Gcc支持的语言越来越多,它的名称变成了GNU Compiler Collection
它相当于在Linux当中的对.c文件的一个翻译者,将我们的.c文件翻译成计算机可以理解的语言。
对于Gcc而言在使用的时候要特别的注意文件的后缀名 比如.c , .cpp等
在使用Gcc编译我们写的.c文件的时候一定要注意语句的格式:
gcc -o(output有输出的意思)
gcc -o 输出的文件名 输入的文件名
gcc -v -o;可以查看Gcc调用了哪些东西。
gcc -g -o 输出的文件名 输入的文件名;包含调试信息
gcc -S -o 输出文件名称(.s) 输入文件名称(.c、.i)(编译命令生成.s文件)
gcc -c -o 输出文件名称(.o) 输入文件名称(.s)
(汇编命令由.s文件生成.o文件);可以完成编译、汇编两个内容
gcc -o 输出文件名称 输入文件名称(完成连接) 可以完成编译、汇编、连接三个内容
vi 文件的名称(查看文件内容,也可以编辑文件)
gcc -E -o 输出文件名称(.i) 输入文件名称(.c) 宏定义预处理命令
Linux学习(C语言学习之Gcc)_第1张图片
gcc -I(跟文件名) -o 输出文件 输入文件 指定在()文件中搜索头文件。
whereis stdio.h 查询文件在哪一个目录下面
库选项:
Linux学习(C语言学习之Gcc)_第2张图片
编辑静态链接库:
1、先生成目标文件 .o(gcc -c -o 输出文件名称(.o) 输入文件名称(.s/.c))
2、ar crv 输出文件(.a) 输入文件(.o)
调用静态链接库:
gcc -o [file] [file.c] -L要查找的文件名 [file.a]
编译动态链接库:
1、生成位置无关的目标代码 gcc -fPIC -c [.c]
2、gcc -shared -o [file.so] [file.o]
调用动态链接库:
gcc -o [file] [file.c] -L要查找的文件名 [file.so]
gcc中常见的预处理错误:
#include “name” 从当前目录下寻找
#include 从系统下寻找
最常见的错误是:not find
解决问题的命令:
gcc -I跟查找头文件的目录
编译错误:
语法错误 ;(忘写)
连接错误:
错误原因:原材料不够 undefined reference to ‘函数名’,没有定义此函数
原材料多了 multiple definition of ‘函数名’,重复定义此函数
多个c文件的打包方法:
gcc -o 输出文件名 第一个.c文件 第二个.c文件…(不建议使用此方法)
建议使用的方法:
gcc -c -o 输出文件名称(.o) 第一个输入文件名称(.s)
gcc -c -o 输出文件名称(.o) 第二个输入文件名称(.s)
gcc -o 输出文件名称 第一个.o文件 第二个.o文件
警告选项:
Linux学习(C语言学习之Gcc)_第3张图片
gcc -Wall -o 输出文件 输入文件
优化选项:
-Olevel 优化等级,一般只是最终发布的时候才用
gcc -O3 -o 输出文件 输入文件 3级优化
预处理的使用整个编译的第一步
可以分为一下几类:
#include “” <> 包含头文件
#define 宏定义(注意后面不加分号)不进行语法检查
#define 宏名 宏体(如果宏体是一个表达式,建议直接加括号,防止出错)
预定义宏

__FUNCTION__  指函数名
__LINE__	指行号(本条语句的行号)
__FILE__	指文件名

系统定义的宏
条件预处理:
#ifdef #else #endif
Linux学习(C语言学习之Gcc)_第4张图片
在以上的代码段中:#ifdef ABC 的意思是如果定义了ABC就执行下一条语句,这样就可以在调试与用户两个版本之间切换。
gcc -D
比如 gcc -DABC1 相当于#define ABC1
#字符串化
#define ABC(x) #x
##连接符号
#define DAY(x) day##x

你可能感兴趣的:(Linux之c学习)