C/C++的编译和链接过程

目录

从源文件生成可执行文件(书中第2章)

1.Preprocessing预处理——预处理器cpp

2.Compilation编译——编译器cll

ps:vs中优化选项设置

3.Assembly汇编——汇编器as

ps:vs中汇编输出文件设置

4.Linking链接——链接器ld

符号

模块,库

链接过程——链接器

链接过程

1.简单链接的例子

2.链接过程

3.地址和空间分配,符号决议,重定位

4.C++中链接相关的问题

5.使用静态库链接——gcc -static 

6.实现一个静态链接的最“小”的helloword程序

7.VS链接器link.exe的符号解析过程

动态链接(第七章)

动态链接 vs 静态链接

共享对象so

装载时重定位——在装载时修正指令中对绝对地址的引用

代码段:编译生成地址无关“代码”——fPIC

数据段:数据段拥有绝对地址引用时,也会生成重定位表

使用动态链接的程序

动态链接下的装载

Linux共享库的组织

共享库的兼容性:

共享库的版本机制演化

1)共享库的文件命名规则:libxxx.so.x.y.z  

2)使用SO-NAME来记录共享库的依赖关系

3)基于符号的版本机制p236-p240

系统指定的共享库目录

ldconfig程序

影响动态链接器行为的一些环境变量

1)LD_LIBRARY_PATH——临时改变动态链接器装载共享库路径的方法

2)LD_PRELOAD——利用全局符号介入测试某些函数

3)LD_DEBUG——打印装载过程的一些信息。

gcc和ld的编译链接命令

Windows下的共享库


书:《程序员的自我修养-链接装载库》 大部分分析的是C语言程序编译链接过程,linux下gcc。

也介绍了一些共享库的内容。

C++ 引用Lib和Dll的方法总结_Bird鸟人的博客-优快云博客

 cl.exe和link.exe分别是visual studio 中的编译器和链接器

配置属性中的【c/c++】(设置编译的一些选项) 和 【链接器】选项页中,最后的那个命令行汇总了所有生效的设置,就是最终执行的命令行

配置属性中的VC++ 目录用于设置各个路径,相当于设置环境变量PATH(搜可执行文件的路径):

INCLUDE(搜include中文件的路径)

LIBPATH(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ivy_0709

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值