21-软件安装:原始码与Tarball
1.gcc
1.1 编译流程
1.hello.c编译成 → hello.o 添加连接生成可执行文件
1.2 编译单个文件
gcc hello.c
#当单个文件时,直接用gcc编译源码,且不加任何参数,会自动生成a.out可执行文件
1.3 编译时添加外部函数库连接 (关于#include的查找路径)
1. 翻译单元 : 编译器将源代码文件和所有的头文件都看成一个包含信息的单独文件,这个单独文件被称为翻译单元
2. 引入头文件的作用
示例 : #include <stdio.h>
作用 : 编译时从指定目录中寻找源代码文件,将调用的函数定义做替换
默认路径 : #include 会默认从 /usr/include路径下去找,当include文件包没在/usr下时需要用-I指定下
3.一个小实验
1.自己编写函数gaocun.c,放入到/usr/include
2.在C代码中就可以引用 #include <gaocun.c>
4.-lm 参数
-l :加入函数库library,linux预设将其放在/lib下,如果不在需要使用-L/pathName/lib
-m : 加入函数库libm.so,linux预设将其放在/lib64下,如果不在需要使用-L/pathName/lib64
使用场景 : 代码中需要调用这两个目录下的函数时
5.-I/PathName (大写I)
参数说明 : 指定#include的目录,默认在/usr/include下
注意事项 : 预处理器会将头文件的#include替换成物理文件,注意要避免与引入包中的全局变量冲突
1.4 编译多个文件
0.前提 : 现有四个源码文件 (four.c main.c one.c three.c two.c),其中主函数为main.c
1.gcc -c main.c one.c three.c two.c four.c
-c : 编译、汇编到目标代码,不进行链接
结果 : 生成目标文件(object file) main.o one.o three.o two.o four.o
2.gcc -o ProName main.o one.o three.o two.o four.o
-o : 将目标文件链接,并生成可执行文件
结果 : 生成可执行文件 ProName
注意事项 : 当子程序逻辑变动时(如 one.c),只需要重新编译one.c并重新生成one.o,再将所有目标文件进行-o,可以节省编译时间
1.5 两个非必要参数(-O -Wall)
-O : 依赖当前操作环境给予优化执行速度
-Wall :打印编译过程信息
1.6 编译多个文件(举个🌰)
1. 准备源文件 four.c main.c one.c three.c two.c
#include <stdio.h>
void four()
{
printf("4-four调用完成\n");
}
#include <stdio.h>
int main()
{
printf("0-main函数调用...\n");
one();
two();
three();
four();
return 0;
}
#include <stdio.h>
void one()
{
printf("1-one调用完成\n");
}
#include <stdio.h>
void three()
{
printf("3-three调用完成\n");
}
#include <stdio.h>
void two()
{
printf("2-two调用完成\n");
}
2. 编译源文件 gcc -c main.c one.c two.c three.c four.c
结果 : 生成目标文件(object file) main.o one.o three.o two.o four.o
3. 链接目标文件,生成可执行文件 gcc -o main main.o one.o three.o two.o four.o
结果 : 生成main
2.make
待补充
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界