链接、装载与库
文章平均质量分 71
时间文盲
不期而遇,简单一点。
展开
-
在C++程序中调用被C编译器编译后的函数,为什么要加extern "C"?
这个知识点,之前的实习项目里面全部是这种情况。百度之,仅记录。extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。在C++中支持函数重载,C不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为: void foo( int x, int y ); 该函数转载 2013-10-21 10:35:07 · 1046 阅读 · 0 评论 -
关于编译的一些事儿
关于编译的一些事儿 一个烂笔头用的着的地方,记录工作中经历的编译方面的po事儿,仅此而已...原创 2017-02-25 21:40:19 · 1259 阅读 · 0 评论 -
ARM架构栈帧回溯实践
欠债+1原创 2017-04-27 22:29:47 · 1765 阅读 · 0 评论 -
链接、装载与库:运行库
简介 本篇简单介绍下运行库,并总结下一个程序的最终运行环境。入口函数 操作系统装载程序之后,并不是马上从main()函数开始。程序运行的第一行代码是从ELF可执行文件头中的入口地址开始的。从入口地址开始的代码,会负责准备好main函数执行所需要的环境,并且负责调用main函数。之后,你才可以放心的在main函数中申请内存、使用系统调用,访原创 2015-04-14 19:31:00 · 846 阅读 · 0 评论 -
链接、装载与库:动态链接
简介 本篇整理了动态链接相关的原理、整个链接和装载的过程。为什么要动态链接 1. 静态链接的方式对于内存和磁盘空间浪费严重。例如,使用静态链接的每一个C程序都将自己保留一份C静态库。 2. 使用静态链接方式的程序一旦有任何模块的更新或微小的改动,都需要整个程序重新编译链接以及发布。动态链接原创 2015-04-11 21:02:10 · 974 阅读 · 0 评论 -
链接、装载与库:静态链接
前言 上一篇其实是对一个章节主线内容的小小总结,之所以打算写这些简单的总结,是因为发现自己一本书即便看了两三遍,也还是不能系统性的将知识点串联在一起。与其花时间往往复复的翻看,不如把每章的重点简要整理下。这篇是关于生成可执行文件的一个核心内容:链接,从静态链接开始。简介 可执行文件(即程序)是由链接器将输入的目标文件加工再组合而成。由上篇内容的ELF文件结构描述基本也可以了解到,生成可执行文件的本质是将各输入目标文件各个相似段的内容进行合并,比如最重要的代码段和数据段原创 2015-03-24 22:00:11 · 734 阅读 · 0 评论 -
链接、装载与库:可执行文件的装载
简介 本篇从操作系统的角度,整理下整个可执行文件的装载过程。 目前的操作系统对可执行文件的装载基本都采用页映射的动态装入方式。所谓页映射方式是指将内存和磁盘中的数据和指令均以“页”为单位进行装载操作。可执行文件装载 一个程序被执行最通常的情形是,创建一个进程,然后装载相应的可执行文件,最后程序运行。这样的一个过程,主要涉及原创 2015-04-02 22:10:54 · 861 阅读 · 0 评论 -
链接、装载与库:Linux下的ELF文件
简介 ELF(Execuable Linkable Format)文件,即可执行可链接格式的文件。 在Linux系统中,目标文件(即源码编译后的但是未进行链接的中间文件)、可执行文件、动态链接库均按照可执行文件格式存储,静态链接库稍有不同,但是它也是由多个目标文件捆绑在一起,再加上一些索引等而形成的文件。 根据ELF文件标准,将Linux系统中采用原创 2015-03-21 18:23:11 · 953 阅读 · 0 评论 -
Makefile/Makefile.am/Makefile.in三者关系
Makefile Makefile.am Makefile.in自动生成 Makefile 的全过程详解! automake/autoconf 入门automake/autoconf 入门作为Linux 下的程序开发人员,大家一定都遇到过Makefile ,用make 命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile ,如果要想写出转载 2013-12-23 15:51:59 · 13275 阅读 · 3 评论 -
内联函数与宏定义区别
被问到这题,只能说区别是真不知道,度娘记录之,然后发现内联函数里面东西也蛮有用的。内联函数与宏定义区别:1,内联函数在运行时可调试,宏定义不可以;2,编译器会对内联函数的参数类型做安全性检查或自动类型转换(同普通函数),宏定义不会;3,内联函数可以访问类的成员变量,宏定义不能;4,在类中声明同时定义的成员函数,自动转化为内敛函数;(对于3、4,LZ不用面向对象语言,仅记录)转载 2013-11-09 17:44:03 · 1074 阅读 · 0 评论 -
链接、装载与库:MiniCRT移植
简介 《程序员的自我修养》最后一章中有个小型C运行库(MiniCRT)的实现,于是想着至少要亲自手动再实现一遍。在实现的整个过程中碰到了一些编译执行的问题,这里做下记录总结。其中,《MiniCRT 64位 Linux系统移植记录》(下文简称《记录》)这篇博文为我提供了很大的帮助,在此表示感谢。原创 2015-05-23 18:30:08 · 1698 阅读 · 0 评论