lib和dll中全局变量的链接性及用法总结
来源:互联网 发布:ios程序员工资待遇 编辑:程序博客网 时间:2024/06/03 14:45
今天在公司干完活后思考了lib和dll的链接性,然后做了测试,发现和我想象的不大相同,具体总结如下:
lib: lib中的全局变量在链接它的单元中是可以通过extern访问到的,但是链接它的单元如果定义了一个相同的全局变量那么lib中的全局变量将被忽略,而且不会出现重复定义的错误。lib中的函数则不相同如果链接它的单元有了相同的函数就会发生重复定义。在lib的cpp中定义一个静态的变量会被所有用到这个lib的模块公用,在链接一个程序的时候会自动的去掉重复链接的lib保证某个lib只有一份代码存在,如果在其他lib中直接包含这个cpp那么这个静态变量将不会被公用。所以如果要在几个lib中共享一部分代码那么最好把这部分公共代码也做成lib,那样会避免问题的发生。
dll: 要访问dll中的全局变量则要加extern __declspec(dllimport)前缀才行,那是因为这是一个导出的全局变量,如果dll中的全局变量定义或者声明的时候不加__declspec(dllexport)前缀的话在使用它的单元是没有办法链接到这个全局变量的,这是和lib不一样的地方,dll和lib的本质区别在于lib参加链接而dll只有显式导出的部分才参加链接,而且dll衔接产生的调用是通过一个导入表间接进行的,速度略慢一点点。dll中变量导出之后它的名字和lib的有所不同带有__imp__前缀。
上面都是我的个人愚见,欢迎指教。
- lib和dll中全局变量的链接性及用法总结
- lib和dll中全局变量的链接性及用法总结
- C++中对Lib及Dll的链接调用
- lib和dll中的全局变量
- VS2008中LIB和DLL的创建及调用
- VS2008中LIB和DLL的创建及调用
- DLL与LIB的区别和用法
- SQL中全局变量和局部变量的区别及用法
- 利用VS2010生成DLL文件及DLL中函数和全局变量的使用
- dll和lib的相关问题总结
- Delphi 中动态链接库(dll)的建立和使用 (c下的LIB和Dll相似)
- dll和lib(包括静态链接库和与dll同时生成的lib)
- dll和lib(包括静态链接库和与dll同时生成的lib)
- dll和lib(包括静态链接库和与dll同时生成的lib)
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别.
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别
- VC.Net中创建与使用静态链接库(lib)和动态链接库(dll),以及它们的区别
- 动态链接库dll和lib文件的生成
- I/O 口在矩阵扫描时-输出接输出时
- 解决Unicode的乱码问题
- 关于Resources.Load(string, type)的一个错误
- sql server 2008 远程连接配置
- 对javabean的简单内省和复杂内省操作
- lib和dll中全局变量的链接性及用法总结
- 数字类型 字符串型 互换
- 定制Activity
- 语法分析
- 我的第一次检讨书
- repo sync: branch xxx published (but not merged) and is now 132 commits behind
- hdu-2602 捡骨头(dp)
- 使用BeanUtils工具包对javabean操作
- 头疼。