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 |
由于使用静态链接库将代码编译打包到程序里,程序相应的体积也会增大:
动态编译程序大小:
静态编译程序大小: