linking
文章平均质量分 70
windmissing
喜欢编程,喜欢思考,方向明确
展开
-
普通目标文件的符号解析与重定义处理策略
一、什么是普通目标文件 静态链接器ld可以将一组可重定位目标文件链接成一个可执行目标文件。 其中可重定位目标文件有三种,分别是目标文件(.o)、静态链接库(.a)和动态链接库(.so)。 本文所指的普通目标文件特殊“目标文件(.a)”二、什么是符号 1.符号是指代码中的变量与函数。代码中的关键字不属于符号。 2.符号分为以下4种: (1)可引出符号 由本模块定义,且能被本模块和其原创 2015-04-07 18:30:20 · 1754 阅读 · 1 评论 -
静态库的符号解析和重定义处理策略
一、什么是静态库 将多个普通目标文件打包成为一个单独的文件,称为静态库。 静态库是为了解决以下问题而出现的: (1)C用户需要使用大量的C函数库 把所有的代码放在一个.c文件中,然后产品代码一起编译链接,虽然可以解决这个问题,但是不满足(2) (2)这些C函数需要单独链接进程序,以减少空间浪费 把每个函数作为一个.c文件,分别编译然后一起链接,虽然可以解决这个问题,但不能满足(3) (原创 2015-04-19 12:23:03 · 3907 阅读 · 1 评论 -
1.最简单的操作系统(三)链接脚本
一、什么是链接脚本 链接器脚本二、wind_x86.ld的作用 将程序入口设置为内存的0x7C00处。三、脚本中的地址是什么地址 四、为什么地址要选在0x7C00 内存的某些部分固定用来做固定的用途,随意选择一个地方开始容易引起冲突,于是人们约定程序入口都从0x7C00开始。 BISO把第一个扇区load起来之后会自动跳转到0x7C00处。五、单句分析. = 0x7C00跳过前面的地址,从原创 2015-05-16 12:38:54 · 1846 阅读 · 1 评论 -
Linux下静态库_库的基本概念;如何生成静态库动态库;nm查看库中包含那些函数、ar生成静态库,查看库中包含那些.o文件、ldd查看程序依赖的.so文件;gcc/g++与库相关的参数-L,-l,-f
link: http://www.cppblog.com/tqsheng/archive/2013/01/04/196948.html一、基本概念1.1、什么是库在 windows 平台和 linux 平台下都大量存在着库。 本质上来说库是 一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于 windows 和 linux 的平台不同(主要是编译器、汇编器和连接器 的不同),因此二者转载 2015-10-13 18:42:59 · 1504 阅读 · 0 评论 -
g++/ld中的符号重定义
一、分析 如果一个符号在多个文件中有定义,把这几个文件编译链接到一起,会发生什么呢?链接出错?不要这么急着下结论。 gcc/ld可以链接三种类型的可重定位目标文件,分别是目标文件(.oxx)、静态链接库(.a)和动态链接库(.so)。把a.c和b.c编译成不同的文件类型,其链接结果不同。 二、举个例子 head.h#include <iostream>using namespace std原创 2015-04-03 19:42:23 · 3292 阅读 · 1 评论 -
链接中的符号
一、什么是符号定义符号是指代码中的变量与函数。代码中的关键字不属于符号。 种类符号分为以下4种: (1)可引出符号 由本模块定义,且能被本模块和其它模块引用的符号 非Static全局函数,非static全局变量都是可引出符号 (2)外部符号 由其它模块定义,但被本模块引用了的符号。 其它模块的可引出符号,如果被本模块使用了,就是本模块的外部符号 外部符号变量由extern修饰 (3原创 2016-07-13 14:18:47 · 3295 阅读 · 0 评论 -
g++ 静态链接
链接就是指把各个独立但不完整的模块组装成一个可执行文件的过程。aaa.o ----| 链接bbb.a ----|-------> 可执行文件ccc.so ---| 链接主要要处理的工作是将各个模块之间相互引用的部分都处理里,使得各个模块之间能够正确地衔接。静态链接主要包括这些步骤:地址和空间分配(address and storage allocation)、符号解析(symbol原创 2016-07-14 18:00:49 · 1708 阅读 · 0 评论 -
linux g++ 链接器(一)基础概念
[上一篇 linux g++ 链接器] (http://blog.csdn.net/mishifangxiangdefeng/article/details/52042269) 由编译源代码生成了包含机器指令的文件,我们称之为目标文件。 源代码中的变量或者函数,我们称之为符号。 通常情况下,我们不会把所有工作都写在一个源代码文件上,而是分成多个文件。 既然分成多个文件,就会这样的情况:一个原创 2016-07-27 09:30:06 · 1447 阅读 · 0 评论 -
linux g++ 链接器
我们都知道,要把源代码变成可以运行的程序,需要经过编译、链接等步骤。 其中编译步骤很好理解,就是把我们写的高级语言程序变成机器能够理解的机器指令的过程。 那么既然已经机器指令了,为什么还需要链接才能运行呢?链接究竟做了什么?怎么做的? 这就是我们今天的主题。 基础概念一个实验请看这样四个文件:head.h#include <iostream>using namespace std;v原创 2016-07-27 09:26:55 · 1308 阅读 · 0 评论