linux下使用gcc编译c文件入门 博客分类: Clinxu操作系统 gcclinuxc
程序员文章站
2024-03-06 23:44:32
...
最近有项目用到在linux上使用gcc编译c源程序的工作,于是针对这块做了一些整理,列出
使用gcc在linux下编译c的一些最基础指令
gcc -[command] c文件名称 -o 生成文件别名
command(指令)--
W----(warning警告)
例如: gcc -Wall hello.c -o hello
-version (查看当前gcc版本)
例如:gcc --version
gcc -help(查看帮助)
例如:gcc --help
gcc -Wall file1 file2 ... -o outfilename (gcc 编译多个文件)
注:头文件是不需要进行编译的
例如:gcc -Wall one.c two.c three.c -o liujun
linux 系统头文件一般放在/usr/include 或者是 /usr/local/include
include<> 与 include "" 区别是
include "" 是现在当前目录下查找对应的包含文件,如果没有才会到系统目录去查找对应的头文件
include <> 是直接到系统目录下去查找对应的头文件,不会在当前目录查找头文件
gcc -v filename 显示出gcc编译以及链接的所有信息
例如: gcc -Wall -v hello.c -o hello
gcc -c filename 将当前文件编译成一个目标文件(但不连接)
例如 gcc -Wall -c hello.c (生成一个以扩展名为.o的目标文件)
gcc filename.o filename1.o -o targetFile 将生成的目标文件进行合并成一个可执行文件
例如:gcc one.o two.o -o hello
linux 标准库路径 /usr/lib and /lib
gcc -Wall filename.c /path/file.a -o targetfilename.o 链接编译外部库
例如: gcc -Wall main.c /usr/lib/libm.a -o calc
1.gcc -Wall main.c /usr/lib/libm.a -o calc
2.gcc -Wall main.c -lm -o calc
注:第二个命令与第一句的文件名是相同的,使用 -l 表明当前文件是一个库文件
且是以lib为前戳的。
gcc -I path 告诉编译器在指定的path目录下查找头文件
例如: gcc -Wall main.c -I/usr/opt
gcc -L path 告诉编译器在指定的path目录下查找库文件
ar cr libname.a file1.o file2.o file3.o ... filen.o
将单独的目标文件(.o)文件 整合成一个库文件(名字叫libname.a),一般程序
在与库文件进行结合调用使用
例如: ar cr libhello.a fun1.o fun2.o
ar t libname.a 查看当前libname.a库中由多少个目标文件生成
gcc -Wall main.c libname.a(o) -o hello 将一个目标文件与一个库文件
编译生成一个库文件(顺序必须先写调用文件在写库文件)
gcc -Wall main.c -L/usr/opt -lhello -o liujun 在/usr/opt目录
下查找文件名是libhello.a的库文件
共享库默认加载库目录
/usr/local/lib 和 /usr/lib 设置LD_LIBRARY_PATH改变共享加载库路径
gcc -Wall -ansi hello.c -o hello (-ansi 使用标准的c进行编译)
gcc -Wall -DTEST hello.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文件必须是可执行文件)
使用gcc在linux下编译c的一些最基础指令
gcc -[command] c文件名称 -o 生成文件别名
command(指令)--
W----(warning警告)
例如: gcc -Wall hello.c -o hello
-version (查看当前gcc版本)
例如:gcc --version
gcc -help(查看帮助)
例如:gcc --help
gcc -Wall file1 file2 ... -o outfilename (gcc 编译多个文件)
注:头文件是不需要进行编译的
例如:gcc -Wall one.c two.c three.c -o liujun
linux 系统头文件一般放在/usr/include 或者是 /usr/local/include
include<> 与 include "" 区别是
include "" 是现在当前目录下查找对应的包含文件,如果没有才会到系统目录去查找对应的头文件
include <> 是直接到系统目录下去查找对应的头文件,不会在当前目录查找头文件
gcc -v filename 显示出gcc编译以及链接的所有信息
例如: gcc -Wall -v hello.c -o hello
gcc -c filename 将当前文件编译成一个目标文件(但不连接)
例如 gcc -Wall -c hello.c (生成一个以扩展名为.o的目标文件)
gcc filename.o filename1.o -o targetFile 将生成的目标文件进行合并成一个可执行文件
例如:gcc one.o two.o -o hello
linux 标准库路径 /usr/lib and /lib
gcc -Wall filename.c /path/file.a -o targetfilename.o 链接编译外部库
例如: gcc -Wall main.c /usr/lib/libm.a -o calc
1.gcc -Wall main.c /usr/lib/libm.a -o calc
2.gcc -Wall main.c -lm -o calc
注:第二个命令与第一句的文件名是相同的,使用 -l 表明当前文件是一个库文件
且是以lib为前戳的。
gcc -I path 告诉编译器在指定的path目录下查找头文件
例如: gcc -Wall main.c -I/usr/opt
gcc -L path 告诉编译器在指定的path目录下查找库文件
ar cr libname.a file1.o file2.o file3.o ... filen.o
将单独的目标文件(.o)文件 整合成一个库文件(名字叫libname.a),一般程序
在与库文件进行结合调用使用
例如: ar cr libhello.a fun1.o fun2.o
ar t libname.a 查看当前libname.a库中由多少个目标文件生成
gcc -Wall main.c libname.a(o) -o hello 将一个目标文件与一个库文件
编译生成一个库文件(顺序必须先写调用文件在写库文件)
gcc -Wall main.c -L/usr/opt -lhello -o liujun 在/usr/opt目录
下查找文件名是libhello.a的库文件
共享库默认加载库目录
/usr/local/lib 和 /usr/lib 设置LD_LIBRARY_PATH改变共享加载库路径
gcc -Wall -ansi hello.c -o hello (-ansi 使用标准的c进行编译)
gcc -Wall -DTEST hello.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文件必须是可执行文件)