g++编译后的程序在其他电脑报错

项目场景:

使用g++编译运行一个socket通信程序。

1
g++ bad.cpp -o a.exe -lws2_32

问题描述

将程序拷贝到另一台电脑上无法运行,出现以下提示


原因分析:

 出现此问题是程序缺少动态链接库造成的,当动态链接库和静态链接库同时存在,g++会优先进行动态编译,因此当在其他的电脑上没有相应的动态链接库文件时,程序运行会报错。


解决方案:

解决方案一:手动将提示缺少的dll文件拷贝到报错程序所在的目录,程序就会正常运行。dll文件一般存在于g++安装目录下的bin文件夹内

解决方案二:使用-static选项进行静态编译,这样就会把相关代码打包进程序,运行时也就不需要动态链接库的支持了。

1
g++ -static bad.cpp -o a.exe -lws2_32

由于使用静态链接库将代码编译打包到程序里,程序相应的体积也会增大:

动态编译程序大小: 

静态编译程序大小: