注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[win32] WinSxS -- Side by Side  

2009-03-30 14:18:14|  分类: win32 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

我们一般发布程序,会把所有相关的 DLL 都复制到发布版目录中,不过到了 WinXP/Vista 时代,it won't work~
为了解决 DLL Hell,从 WinXP 开始引入了 WinSxS(side by side) 机制,恩,很容易引起你老的程序出问题。

SxS 深入浅出的介绍
http://eparg.spaces.live.com/blog/cns!59BFC22C0E7E1A76!3944.entry

绕过 WinSxS 的方法
http://davidlenihan.com/2007/07/winsxs.html
http://blog.kalmbachnet.de/?postid=80

DLL search order
http://msdn.microsoft.com/en-us/library/aa374224.aspx

这里有一篇关于 DLL Hell 的介绍,也说了 side by side 的来源
http://www.iiiedu.org.tw/knowledge/knowledge20021130_1.htm

-------------------
当然,另一个绕过 SxS 问题的方法,就是把 libc(crt) 全部 static-link 到你的 .exe, .dll 里面。比如发布 main.exe, d3d9_40.dll, render.dll 三个文件,则分别有三个 libc(crt) 在 .exe/.dll 里面。这,会不会有问题呢?恩~ ms 是不会有问题的,因为 M$ dxd9_xx.dll 就是 static-link 了 libc(crt) 的,如果有问题,呵呵,问题多了去了。
Em ... 抑或~ dxd9_xx.dll 就压根没有 crt,或者弄了个特殊版本,咔咔,ms 不大可能。

static-link 的选项在:(vs2005)
Property Pages
[Configuration Properties] > [C/C++] > [Code Generation] > [Runtime Library]

使用 MFC 的同学,需要
[Configuration Properties] > [General] > [Use of MFC] > [Use MFC in a Static Library]

如果使用了一堆 static lib 的同学,exe 又有隐式创建某 lib 里面东西的,要注意把 lib 中的所有东西都 link 到 exe 中,否则可能碰到莫名其妙的问题。
[Configuration Properties] > [Link] > [General] > [Use Library Dependency Inputs] > [Yes]

ps. 唠叨一句,VS IDE 配置这些东西还真是麻烦,经常找不到地方。

---------------------
2009-04-18
上面说 /MT dll 的问题,对于 malloc/free,这里有更细致的分析。
http://kasicass.blog.163.com/blog/static/39561920093189350699
而对于 dxd9_xx.dll / fmod.dll 等,它们都是提供好函数,属于“谁分配,谁释放”,所以多份 crt 也无所谓啦。

  评论这张
 
阅读(1230)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017