Gcc静态编译

用Gcc(G++)编译一个小程序的时候,本地主机配置好了环境,默认的编译命令使用了动态链接库,这样编译出来的程序在本地主机上是可以直接运行的,并且这样的小程序有另外一个好处——体积特别小,因为动态链接库已经在本地主机上了,不必另外安装,可是把这个小程序拷贝到另外一个电脑上去的话,问题就来了,总是提示缺少”***.dll”文件,解决办法是将动态链接库一起拷贝过去,缺哪一个就拷贝哪一个,另外一个问题又来了,有时候动态链接库还挺大的,数目还不少,对于一些仅有几MB的文件来说,带着一大堆”.dll”文件简直可以逼死强迫症,然后,静态编译就派上用场啦。

情景再现

如图,用默认的动态编译命令,生成的debug版本可执行文件仅有212KB,Release版本仅有157KB,若没有配置环境变量,运行这个程序则会得到如下提示:

并不一定是缺少图中的”libstdc++-6.dll”文件,具体缺少哪些文件是源代码确定的,一劳永逸的办法是使用静态编译命令,这样用到的动态链接库可以集成到可执行文件里面去,直接拷贝到另外一台电脑就可以用了,方法是,最后生成可执行文件时,加上-static参数

CodeBlocks实现

依次点击Setting—>Complier settings—>Linker Settings,将参数填在如图的框里面:

静态编译生成的可执行文件体积较大,这里生成的debug版本的可执行文件体积已经达到1540KB,差不多变大了六倍吧,Release版本的达到798KB,对于数MB的小程序来说,用静态编译很合适,免去了各种”.dll”文件缺失的麻烦,把静态编译生成的Release版本的可执行文件拷贝给别人就好了,dll文件可以不用管。

动态编译还是有好处的,链接库只用安装一次,所有用到该链接库的程序就不用自带链接库,程序的体积会变得小一点。

似乎说了一大堆废话╮(╯-╰)╭

生命重在折腾