MinGW 中如何生成独立于MinGW环境…

来源:互联网 发布:php多用户博客系统 编辑:程序博客网 时间:2024/05/22 01:26

在mingw环境中,如果单纯通过[gcc|g++|gfortran] src -oexe的形式生成可执行文件的话,该文件是需要mingw环境中的libgcc和libstdc++等dll文件的。正是因为把这些公用文件都剔除了,所以生成的可执行文件非常的小。但是如果我们想让可执行文件随处可以执行,不需要dll文件的支持的话该怎么办呢?很简单,把这些dll文件静态化。


对于C++ 文件需要这种形式:

g++ -static-libgcc -static-libstdc++ -o$(FileDir)\$(FileNameNoExt) $(FilePath)

注意,是两个dll文件。需要补充说明的是,链接上第一个libgcc可执行文件体积变化不大。但是在链接上第二个文件体积增大1250k左右。加入-s 选项,就会体积减小


对于C文件 需要:

gcc -static-libgcc -o $(FileDir)\$(FileNameNoExt)$(FilePath)

注意,即使此时用 g++ 并带上-static-libstdc++它也不会链接libstdc++这个库,因为并不需要。gcc只有在需要的时候才链接。


对于Fortran文件 :

gcc -static-libgcc -static-libgfortran -o$(FileDir)\$(FileNameNoExt) $(FilePath) 


Alternative

后面加-static 选项即可。即:

g++ -static -o $(FileDir)\$(FileNameNoExt) $(FilePath)

gcc -static -o $(FileDir)\$(FileNameNoExt) $(FilePath)

gfortran -static -o $(FileDir)\$(FileNameNoExt) $(FilePath)


Final

考虑到链接库时,是需要就连接,不需要不连接的原则。上面3条可以统一为:

gcc -static -o $(FileDir)\$(FileNameNoExt) $(FilePath) -lstdc++-lgfortran


 
原创粉丝点击