Implicit Linking与Explicit Linking

一、Implicit Linking(隐式连接)

Implicit Linking(隐式连接) ,又叫静态载入,所谓静态载入是指程序在连接时期即与dlls所对应的import libraries作静态连接,于是可执行文件中便对所有的dll函数都有一份重定位表格(relocation table)和待修正记录(fixup record)。当程序被windows载入器载入内存中时,载入器会自动修正所有的fixup records,而这个fixup records 就是记录DLL中所有输出资源的正确位置地址,经过这样的程序动态连接便自动产生。也就是说,程序开始执行时,会用静态载入的方式时所使用的DLLs都载入到程序的内存里。

静态载入方式的优点

1、静态载入方式所使用的dll会在应用程序执行时载入,然后就可以调用所有dll中提供的函数,就像是程序中一样。

2、处理简单,载入的方法有编译器负责处理,不需动脑筋。

静态载入方式的缺点

1、当程序机构态载入方式所使用的dll不存在时,程序开始就会报dll无法找到的错误而使得程序无法运行。

编译时需要加入import library。

2、若调用的dll很多,载入应用程序的速度就会很慢。

不同的c++编译器静态载入的方式也不一样。

二、Explicit Linking(显式连接)

所谓Explicit Link(显式连接)又叫动态载入,使用dll的可执行文件必须明确调用载入和御载dll的函数调用(Function Call),并且存取dll的输出函数。用户端必须通过函数声明调用函数。

可执行文件可以使用任何一种连接方式的相同低dll。并且,这些机制之间并不会相互排斥,因此,当一个可执行文件隐式的连接dll时,其他程序还可以显示地连接它。

时间: 2024-10-12 18:55:18

Implicit Linking与Explicit Linking的相关文章

C#之自己定义的implicit和explicit转换

在类型转换时常会遇到隐式转换和显式转换.那我们自己定义的类型要怎样去定义隐式转换和显式转换?我们来看一段代码 public class Rational { private Int32 _inner_int = 0; public Rational() { } public Rational(Int32 num) { this._inner_int = num; } public Int32 ToInt32() { return this._inner_int; } // Implicitly

C#之自定义的implicit和explicit转换

在类型转换时常会遇到隐式转换和显式转换.那我们自定义的类型要如何去定义隐式转换和显式转换?我们来看一段代码 public class Rational { private Int32 _inner_int = 0; public Rational() { } public Rational(Int32 num) { this._inner_int = num; } public Int32 ToInt32() { return this._inner_int; } // Implicitly c

【转】Service Intent must be explicit的解决方法

原文网址:http://blog.csdn.net/shenzhonglaoxu/article/details/42675287 今天在学习android的Service组件的时候,在AndroidMainfest.xml中定义了 [html] view plaincopy <service android:name=".BindService" android:enabled="true" android:exported="true"

各种搜索路径问题

python中import一个模块时python解释器的搜索目录顺序: 参考python帮助文档 The Module Search Path When a module named spam is imported, the interpreter first searches for a built-in module with that name. If not found, it then searches for a file named spam.py in a list of di

Qt DLL总结【一】-链接库预备知识

1.链接库概念 静态链接库和动态链接库介绍 我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心. 这个文件叫做 "库(Libary)",平时我们把编译好的目标代码存储到"库"里面,要用的时候链接程序帮我们从库里面找出来. 静态链接库: 在早期库的组织形式相对简单,里面的目标代码只能够进行静态链接,所以我们称为"静态库",静态

Catalogue 目录

第二章 态度决定一切 1.做事 2.欲速则不达 3.对事不对人 4.排除万难,奋勇前进 第三章 学无止境 5.跟踪变化 6.对团队投资 7.懂得丢弃 8.打破砂锅问到底 9.把握开发节奏 第四章 交付用户想要的软件 10.让客户做决定 11.让设计指导而不是操纵开发 12.合理地使用技术 13.保持可以发布 14.提早集成,频繁集成 15.提早实现自动化部署 16.使用演示获得频繁反馈 17.固定的价格就意味着背叛承诺 18.使用短迭代,增量发布 第五章 敏捷反馈 19.守护天使 20.先用它再

App Distribution Guide--(三)---Configuring Your Xcode Project for Distribution

Configuring Your Xcode Project for Distribution You can edit your project settings anytime, but some settings are necessary during development. Others are recommended when you distribute your app for beta testing and required when you submit your app

catkin_simple 的使用

Catkin simple 可用于规范catkin package, 并简化CMakeLists  Dependencies are just listed once as build-depend in the package.xml, not also as run-depend etc. Dependencies 无需在 CMakeLists.txt 中列出 Explicit linking of dependencies is not needed anymore (e.g. no ta

nginx基本优化

1.1   隐藏nginx header里版本号信息 1.2   更改源码隐藏软件名称及版本号 1.3   更改掉nginx默认用户及用户组(worker进程服务用户优化) 1.4   配置nginx worker进程个数 1.5   根据cpu核数进行nginx进程优化 1.6   nginx事件处理模型优化 1.7   调整nginx worker单个进程允许的客户端最大连接数 1.8   配置nginx worker进程最大打开文件数 1.9   开启高效的文件传输模式 1.10  设置连