linux使用mingw交叉编译exe文件,windows无法运行

2 篇文章 0 订阅

环境说明

linux:Ubuntu 20.04.1 LTS (win10子系统)
windows:win10
编译器:x86_64-w64-mingw32-g++
shell:windows powershell, cmd, linux shell
文件:linux下文件地址 /home/descosmos/cpp/test.cpp
通过linux访问windows桌面: cd /mnt/c/User/kingsoft/Desktop

事件还原

在linux中有如下文件:

test.cpp

#include<cstdio> 
#include<vector>

using namespace std;

int main(){
	vector<int> arr(2);
	arr1[0] = 2;
	printf("arr[0]: %d.\n", arr[0]);
	return 0;
}

编译过程:

 x86_64-w64-mingw32-g++ test.cpp -o cmd.exe
 // 将cmd.exe复制到windows环境中
 cp cmd.exe /mnt/c/User/kingsoft/Desktop

在powershell中执行cmd.exe,结果为:
在这里插入图片描述
也就是没显示任何结果,在这一步我琢磨了好久是为什么,因为如果不调用 iostream,或者stl,printf就可以工作,最后直到调用了cmd。
在cmd中执行cmd.exe,结果为:

在这里插入图片描述

问题描述

就是缺少了libstdc+±6.dlllibgcc_s_seh-1.dll文件,使得cmd.exe在windows环境中无法加载动态库,执行出现问题。

问题解决

在x86_64-w64-mingw32-g++的安装目录下查找这两个文件:

which x86_64-w64-mingw32-g++

在这里插入图片描述
可以看到在/usr/目录中,直接查找:

find /usr/ -name libstdc++-6.dll
find /usr/ -name libgcc_s_seh-1.dll

在这里插入图片描述
将两个dll拷贝入cmd.exe执行的目录下:

cp /usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libstdc++-6.dll /mnt/c/User/kingsoft/Desktop
/usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/libgcc_s_seh-1.dll /mnt/c/User/kingsoft/Desktop

再在powershell下执行cmd.exe可以看见:
在这里插入图片描述
解决。

附言

对于linux和windows交叉编译的环境而言,版本库的正确与否是十分重要,对于要使用静态库的exe文件而言问题不大,但对于要使用动态库dll的exe文件而言,一定要在执行环境下看看是否存在相应的dll文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值