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

待补充

posted @   学而不思则罔!  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示