VS2008的动、静态编译[转]
开始写了个HelloVS2008,在本机正常运行,但在我的虚拟机中就运行不了,
如图一:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzgxOS85YzdjZTBiMGI1ZGM4MzEwN2QzNTUwZGFlMTkyNWU5Yi5KUEVH)
意料之中,因为前久也或多或少看过一下VS2008的相关文章。
为何出现这种情况呢?
因为VS2008的动态链接库已经是MSVCR90.dll或MSVCR90D.dll了,
而我们系统中安装的一般是低版本的。
要避免这种情况也很简单,从网络中学习到:静态链接就可以了。
以Debug编译为例,默认是这样的(/MDd),如图二:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzg4MS82YmVjOWEzY2I2MzNhZGI2ZDg0YzhkZDA4NWU5NmMwMS5KUEVH)
按F7编译,成功,体积30K,如图三:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkyOC82OTQ1NmZmYmY3M2U3ZjI2YzE1MzRjOGU1MDkwMzUyMC5KUEVH)
我们用Stud_PE查一下,用到了MSVCR90D.dll,如图四:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzE3Mi8zYmM1OWJiZGY4NDg2Y2ViNjg2OWU4MDBlNmZiNTM1NC5KUEVH)
在本机运行肯定是成功的,但在其他机子上就未必,就像图一那样。
下面我们修改成静态链接(/MTd),如图五:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzU1My8yMTY5NmE3MDRhNmI4MWM3MzU5MDE5NWZkNjUwZDczOS5KUEVH)
按F7编译,成功,体积440K,如图六:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzg5My8wYmQ4MzMwNjVjOTI5OTlmOTM0ZGQyZTNiOWNmMjU0NS5KUEVH)
我们再用Stud_PE查一下,没有MSVCR90D.dll了,如图七:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI0Mi85ZjA0NWY5ODg5YzgwYTQ4MDkyNmE3YmY2ODE1OTk4Mi5KUEVH)
放到其他机子上运行一下(我这里是虚拟机,纯净的),如图八:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzg2Ny8yNjQxNjg5YjY3YWRjYjY5M2IwZmMwNWI3OGFhYWIwMy5KUEVH)
Release也一样的,默认是这样的(/MD),如图九:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzQyMi82MGIzMmYyZDUxYmE4NTAxNjczNGU5ZTU4ZmEwZTFmZS5KUEVH)
F7编译后用Stud_PE查一下,用到了MSVCR90.dll,如图十:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzM1Ny84NDY3YTg4ZjBhM2I1Y2NjYmY5ZjAyODE5YzY1OWRkZC5KUEVH)
下面我们修改成静态链接(/MT),如图十一:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzQ4MC84MWRiNjMwNjEzMDAxZjIxNTBhYWMxZTk0MWQ5MDA2MC5KUEVH)
我们再用Stud_PE查一下,没有MSVCR90.dll了,如图十二:
![VS2008的动、静态编译[转] VS2008的动、静态编译[转]](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzY4NS82ZTdiNGEyMjBiM2Q5NWIxZmFkYjFkMDY0MTRmMTU3NS5KUEVH)
就是这样。
如图一:
意料之中,因为前久也或多或少看过一下VS2008的相关文章。
为何出现这种情况呢?
因为VS2008的动态链接库已经是MSVCR90.dll或MSVCR90D.dll了,
而我们系统中安装的一般是低版本的。
要避免这种情况也很简单,从网络中学习到:静态链接就可以了。
以Debug编译为例,默认是这样的(/MDd),如图二:
按F7编译,成功,体积30K,如图三:
我们用Stud_PE查一下,用到了MSVCR90D.dll,如图四:
在本机运行肯定是成功的,但在其他机子上就未必,就像图一那样。
下面我们修改成静态链接(/MTd),如图五:
按F7编译,成功,体积440K,如图六:
我们再用Stud_PE查一下,没有MSVCR90D.dll了,如图七:
放到其他机子上运行一下(我这里是虚拟机,纯净的),如图八:
Release也一样的,默认是这样的(/MD),如图九:
F7编译后用Stud_PE查一下,用到了MSVCR90.dll,如图十:
下面我们修改成静态链接(/MT),如图十一:
我们再用Stud_PE查一下,没有MSVCR90.dll了,如图十二:
就是这样。
本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/archive/2010/12/24/1916094.html,如需转载请自行联系原作者