【Linux操作系统】程序的编译和动静态链接
创始人
2024-05-07 05:07:10
0

文章目录

  • 一.编译
    • 写在前面
    • 1.预处理
    • 2.编译
    • 3.汇编
  • 二.(动静态)链接
    • 1.动态链接
    • 2.静态链接
    • 3.静态链接库的下载安装
    • 4.windows下动静态库的后缀

一.编译

写在前面

编译这整个过程都只是在编译你自己写的代码,直到链接才让你的代码和库的代码关联起来,最终形成可执行程序

源程序到可执行程序的整个过程: ESc-iso

image-20230105235730837

1.预处理

预处理四大任务:头文件展开去注释宏替换条件编译

gcc test.c -E -o test.i

-E:开始翻译,并且在预处理后停下来

-o:指明形成临时文件的名称

image-20230105233743972

通过这里我们可以看到预处理后还是C语言代码,预处理完成的只是文本操作!

ps:这里不带-o是不行的,程序停下来后会将预处理后的文件内容直接打印到终端

image-20230105233942235

通过-o生成的.i文件我们可以清晰的看到头文件展开后的结果是一堆函数和变量的声明,并没有函数的具体实现!

.h(头文件)中只包含函数的声明,函数的具体实现在标准库里

头文件存在的最大意义:

1.提供函数的声明

2.自动补全代码

image-20230105235825189

2.编译

编译是将C语言代码翻译成汇编代码

gcc -S test.c -o test.s

3.汇编

汇编是将汇编代码翻译成二进制代码

gcc -c test.c -o test.o

汇编完成后得到二进制代码,但是这并不能被执行,因为编译这整个过程都只是在编译你自己写的代码,直到链接才让你的代码和库的代码关联起来,最终形成可执行程序.

image-20230106000407273

二.(动静态)链接

链接的目的:把自己写的并且编译好的二进制代码和库里的二进制代码关联起来,形成可执行程序!

image-20230106002029115

1.动态链接

动态链接方式:在运行时需要去标准库里找函数的实现

优点:形成的可执行程序体积小

缺点:依赖动态库,易收到动态库丢失等原因出现运行时错误!

gcc test.c -o test//Linux-默认是动态链接的链接方式
file 可执行程序
ldd 可执行程序
//在linux中, ldd是list dynamic dependencies的缩写, 意思: 列出动态库依赖关系

image-20230106002356805

dynamically linked (uses shared libs)//动态链接方式(共享库)
libc.so.6 => /lib64/libc.so.6 (0x00007f86cd306000)//动态库->位置(代码地址)

2.静态链接

静态链接方式:在链接时直接将函数的实现拷贝一份到我的程序中,运行时不用找!

优点:不依赖第三方库

缺点:形成的可执行程序体积大

gcc test.c -o test -static//指明采用静态链接的链接方式
file test

image-20230106002708957

statically linked//静态链接方式

3.静态链接库的下载安装

动态库一般系统自带,因为系统运行时需要用到动态库

静态库在Linux中一般要自行安装

sudo yum install glibc-static//安装C静态库
sudo yum install libstdc++-static//安装c++静态库
gcc test.c -o test -static//生成静态程序test

4.windows下动静态库的后缀

windows下动静态库的后缀:
动态库:.dll
静态库:.lib

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...