在mingw环境中,如果单纯通过[gcc|g++|gfortran] src -o exe 的形式生成可执行文件的话,该文件是需要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)
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