lib和dll中全局变量的链接性及用法总结

今天在公司干完活后思考了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__前缀。


上面都是我的个人愚见,欢迎指教。


http://blog.csdn.net/wxq1987525/article/details/6564362


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值