嵌入式linux面试题解析(一)——ARM部分二1、描述一下嵌入式基于ROM的运行方式基于RAM的运行方式有什么区别。基于RAM的运行方式:需要把硬盘和其他介质的代码先加载到ram中,加载过程中一般有重定位的操作;基于ROM:没有上面的操作。基于ROM:速度较基于RAM的慢,因为会有一..
分类:
系统相关 时间:
2016-07-30 06:57:56
阅读次数:
298
7.7 重定位 当完成了符号解析, 也就意味着代码中的每个符号引用和符号定义联系起来了, 那么对于那些在一个文件中定义而在另外一个文件中引用的符号, 我们就可以确切地知道其大小. 接下来是重定位 : 7.7.1 重定位条目 重定位条目有两种, 分别放在.rel.text和.rel.data中 : 1 ...
分类:
其他好文 时间:
2016-07-22 17:25:42
阅读次数:
138
在编译共享库必须加上-fpic。这是为什么呢? 首先看一个简单的例子: 先不加-fpic的情况下生成库,反汇编查看fun1的机器码 可以看出调用printf的位置是那个唯一的一个call,并不是跳转到plt表,有关plt表的内容可以查看我前面的博文。也就是说在该库被加载时需要修改代码段来达到重定位的 ...
分类:
系统相关 时间:
2016-07-21 14:36:58
阅读次数:
285
一:为什么需要进行重定位我们在设计一个程序时,会给这个程序指定一个运行地址(链接地址)。就是说我们在编译程序时其实心里是知道我们程序将来被运行时的地址(运行地址)的,而且必须给编译器链接器指定这个地址(链接地址)才行。最后得到的二进制程序理论上是和你指定的..
分类:
其他好文 时间:
2016-07-19 02:32:44
阅读次数:
171
1、若C#调用VC的动态库,而dll中使用了MFC则须将MFC静态链接到dll中。 2、C#调用C++的动态库有三种方法:COM组件、托管代码、非托管代码。 COM组件需客户端注册,若客户无管理员权限则无法使用; 托管代码可以将dll中的类导出,但需要写托管代码,添加工作量且代码看上去有点**; 非 ...
分类:
编程语言 时间:
2016-07-11 12:11:08
阅读次数:
124
符号重定位讲动态链接之前,得先说说符号重定位。c/c++程序的编译是以文件为单位进行的,因此每个c/cpp文件也叫作一个编译单元(translationunit),
源文件先是被编译成一个个目标文件,
再由链接器把这些目标文件组合成一个可执行文件或库,链接的过程,其核心工作是解决模块间各..
分类:
其他好文 时间:
2016-07-11 01:27:16
阅读次数:
107
lib分为 staticlib 和 dynamic lib: lib分为 staticlib 和 dynamic lib: 静态lib将导出声明和实现都放在lib中,编译后所有代码都嵌入到宿主程序, 链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。 动态lib相当于一个 ...
分类:
其他好文 时间:
2016-07-08 14:58:28
阅读次数:
166
1、转载:http://www.cnblogs.com/kex1n/archive/2011/09/06/2168435.html 动态链接库、静态库、import库区别 动态链接库(Dynamic Linked Library):Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动 ...
分类:
其他好文 时间:
2016-07-07 19:08:22
阅读次数:
114
所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。.so文件是共享库文件(动态链接)。动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函 ...
分类:
系统相关 时间:
2016-07-05 18:24:30
阅读次数:
252
GNU工具链学习笔记 GNU工具链学习笔记 1..so为动态链接库,.a为静态连接库。他们在Linux下按照ELF格式存储。ELF有四种文件类型。可重定位文件(Relocatable file,*.o,*.a),包含代码和数据,可用来连接成可执行文件或共享目标文件;可执行文件(Executable ...
分类:
其他好文 时间:
2016-07-04 06:31:45
阅读次数:
135