最近,在linux上有一个项目用于使用gcc编译c源程序,对此进行了整理和列举
使用gcc在linux上编译c的最基本指令
gcc -[command] c文件名-o生成文件别名
命令----
w---- (警告warning )
例如,gcc -Wall hello.c -o hello
-version (查看当前gcc版本) ) ) ) ) )。
例如,gcc--版本
gcc -help (显示帮助)
例如,gcc --help
gcc-wall file 1file2.-o outfilename (gcc编译多个文件) ) ) ) )。
注:头文件不需要编译
示例: gcc-wallone.ctwo.c three.c-oliujun
linux头文件通常位于/usr/include或/usr/local/include中
包含和包含' '的区别在于
include“”在当前目录下搜索相应的包含文件。 如果不存在,请到系统目录搜索相应的头文件
include直接前往系统目录,并搜索相应的头文件。 它不会在当前目录中搜索头文件
gcc-v文件名称显示有关gcc编译和链接的所有信息
例如,gcc -Wall -v hello.c -o hello
gcc-c文件名称将当前文件编译为目标文件。 但是,不连接)
例如,gcc -Wall -c hello.c (生成扩展名为. o的目标文件) )。
gcc filename.o filename1. o-otargetfile将生成的目标文件合并为一个可执行文件
例如:gcc one.o two.o -o hello
linux标准库路径/usr/lib and /lib
gcc-wall filename.c/path/file.a-otargetfilename.o链接编译外部库
例如,gcc -Wall main.c /usr/lib/普通海豚/p 1.gcc -Wall main.c /usr/lib/普通海豚/p2. gcc-wall main.c-lm -
注意:第二个命令与第一个语句的文件名相同。 如果使用-l,则表示当前文件是库文件
是在lib面前提出来的。
gcc -I path指示编译器在指定的path目录下搜索头文件
示例: gcc -Wall main.c -I/usr/opt
gcc -L path指示编译器在指定的path目录下搜索库文件
arcrlibname.afile1. ofile2. ofile3. o . filen.o
将单独的目标文件(.o )文件合并为一个库文件(名称为libname.a ),并执行一般步骤
与库文件结合使用
例如: arcrlibhello.afu n1.ofun2. o
ar t libname.a检查在当前libname.a库中生成的目标文件的数量
gcc-wallmain.clibname.a(o )-o hello将目标文件和库文件
编译并生成库文件。 顺序是必须先写调用文件写库文件)
gcc-wall main.c-l/usr/opt-lhello-oliujun位于/usr/opt目录中
下面的搜索文件名是libhello.a的库文件
共享库加载默认库目录
/usr/local/lib和/usr/lib设置更改LD_LIBRARY_PATH共享加载库路径
gcc-wall-ansi hello.c-o hello (-ansi使用标准c进行编译)。
gcc-wall-dtesthello.c-o hello (-d相当于程序中的#define TEST ) )。
CPP-DM/dev/null (显示内置于gcc中的预定义宏) ) ) ) ) ) ) )。
编译器需要执行以下四个步骤:
1 .预编译:
cpp main.c main.i (将文件main.c中包含的头文件的内容加载到当前
在名为main.i的文件中,这是编译前的阶段)
2 .编译并转换成汇编语言
gcc -Wall -S main.c (将文件main.c的内容转换为汇编语言) )。
3 .生成目标文件
as main.s -o main.o
4 .将对象文件链接到可执行文件。 (链接系统标头库,包括程序中使用的静态库或动态库) ) ) ) ) ) ) ) ) ) )。
gcc main.o
显示file file.o文件信息
ldd main显示可执行文件main所依赖的库。 main文件必须是可执行文件