有的时候我们经常会把自己编译执行通过的.exe文件放到其他机子上运行,却惊奇地发现系统提示找不到什么相关文件的问题,导致编写的程序只能孤芳自赏。
其实这个问题的缘由主要是编译器默认执行动态编译,所谓动态编译,就是程序运行所需要的库等相关文件是执行时才添加上去的,由于在本机当然有那些文件,可是到了其他机子上,就会发现找不到的错误,各种机子千差万别,发生这种错误也就在所难免。
与动态相对应的自然为静态编译,所谓静态编译,就类似打包行为,编译时会把程序所需的文件打包在一起,这时只要本机能通过,其他机子也能运行,因为它里面就包含了程序正常运行的相关文件。
到了这里,很多人觉得奇怪,因为明显第二种即静态编译就是我们所需要的,为何还需要动态编译呢?
其实事件无法尽善尽美,鱼与熊掌不可兼得,静态编译虽然能在不同机子上运行,可它由于加入了许多文件,导致体积变得庞大,而动态编译就相对小些,所以怎们选择,还是要根据实际情况分析。
下面提供一种在vs2013上静态编译的方法:
首先选中自己的项目,然后右键属性,在弹出的属性页对话框中依次点击配置属性-->c/c++-->代码生成,右边有个运行库,默认为“多线程调试 DLL (/MDd)”,将其改为“多线程调试 (/MTd)”或“多线程 (/MT)”就大功告成了。其他编译器原理类似,自己百度去。