汕头网站制作哪里好,海淀网站设计公司,南京app开发定制,宁波seo网络推广服务商1. 介绍
C语言的相关后缀
.a 文件是一个静态库文件.c,.c ,.cp,.cpp,.cc,.cxx 这几种后缀都可以表示c的源文件.h ,.hpp c语言的头文件.i 是c预处理文件.o 目标文件.s汇编语言的文件.so 动态库或者共享库或者称为运行时库
2. C编译
2.1 预处理
g -E helloworld.cpp # 虽…1. 介绍
C语言的相关后缀
.a 文件是一个静态库文件.c,.c ,.cp,.cpp,.cc,.cxx 这几种后缀都可以表示c的源文件.h ,.hpp c语言的头文件.i 是c预处理文件.o 目标文件.s汇编语言的文件.so 动态库或者共享库或者称为运行时库
2. C编译
2.1 预处理
g -E helloworld.cpp # 虽然预处理了但不会输出.i文件
g -E helloworld.cpp -o helloworld.i # 指定输出.i文件-E选项告诉编译器只进行预处理操作-o 选项把预处理的结果输出到指定文件
2.2 生成汇编语言
g -S helloworld.cpp
g -S helloworld.cpp -o helloworld.s-S 选项告诉编译器进行预处理和编译成汇编语言操作
每个平台对应的汇编语言的形式是不同的例如有很多型号的开发板有很多型号的CPU
2.3 源文件生成目标文件
g -c helloworld.cpp # 默认生成 helloworld.o 目标文件
g -c helloworld.cpp -o harumph.o # 指定目标文件名
#编译多个.c文件
g -c helloworld.cpp helloworld1.cpp hellworld2.cpp2.4 生成可执行文件
(1) 单个源文件编译为可执行文件
注意: 后面2个命令执行后并没有按编译过程出现.i,.s,.o文件并不意味着没有经历这些过程
g helloworld.cpp
g helloworld.cpp -o howdy执行程序
./可执行文件(2) 多个源文件编译为可执行文件
g hellomain.cpp sayhelo.cpp -o hello3. 生成库文件
3.1 生成静态库
(1) 编译成.o文件
g -c [.cpp] -o [自定义文件名] #单个源文件
g -c [.cpp] [.cpp] ... # 多个源文件(2) 编译静态库
ar -r [lib自定义库名.a] [.o] [.o] ...(3) 链接成可执行文件
g [.cpp] [.a] -o [自定义输出文件名]
g [.cpp] -o [自定义输出文件名] -l[库名] -L[库所在路径]3.2 生成动态库
(1) 编译二进制.o文件
g -c -fpic [.c/.cpp] [.c/.cpp] ...(2) 编译动态库
g -shared [.o] [.o] ... -o [lib自定义库名.so](3) 链接动态库到可执行文件
g [.c/.cpp] -o [自定义可执行文件名] -l[库名] -L[库路径] -Wl,-rpath[库路径]4. 总结
(1). 编译过程
源文件.cpp文件 - 预编译成.i文件 - 编译成汇编语言.s - 汇编成.o文件 - 链接成可执行文件名字自定义后缀没关系
(2). 编译过程命令
预处理
g -E [.cpp源文件] -o [自定义输出文件名.i]编译成汇编语言[隐藏了预处理操作]
g -S [.cpp源文件]编译目标文件(二进制文件可用于链接)
g -c [.cpp源文件] [.cpp源文件] [...] (可选项:-o [自定义文件名])(3). 库
静态库
编译(先转成.o文件在编成lib(自定义库名).a)
g -c [.cpp源文件] [.cpp源文件] [...] (可选项:-o [自定义文件名]) #编译目标文件ar -r lib[自定义库名].a [.o文件] [.o文件] [...]动态库
编库 第一种做法先转成.o文件再编成.so文件 g -c fpic [.cpp源文件] [.cpp源文件] [...]
g -shared [.o文件] [.o文件] [...] -o lib[库名].so第二种做法直接转成.so
g -fpic -shared [.cpp源文件] [.cpp源文件] [...] -o lib[库名].so链接
g [main文件] -o [自定义输出可执行文件名] -l[库名] -L[库所在路径] -Wl, -rpath[库所在路径]可以看出C的编译和库连接与C的编译和链接基本上都是一模一样。区别很简单:
命令中 c用的是g编译器 c语言用的是 gcc编译器并且g编译器同时也支持.c c文件的编译