cpp exe文件在wsl上工作但在windows10 cmd上不工作

Posted

技术标签:

【中文标题】cpp exe文件在wsl上工作但在windows10 cmd上不工作【英文标题】:cpp exe file working on wsl but not working on windows10 cmd 【发布时间】:2021-01-19 17:35:51 【问题描述】:

我在 WSL 中使用命令g++ main.cpp foo.cpp 使用 g++ 创建了一个可执行文件,并且在 WSL 环境中运行良好。

但是,在 windows 10 的命令行中,当我尝试执行该文件时,它说 由于与 64 位版本的 Windows 不兼容,程序无法启动或运行。 [不支持 16-位应用]

所以,问题是“如何在 WSL 中使用 g++ 构建 64 位或 32 位可执行文件。” 目前,我想我得到的是 16 位版本。

【问题讨论】:

如果您需要更多信息,请询问我。谢谢! 根据page,它说 gcc 和 g++ 编译器默认为 64 位模式编译。但为什么我得到的是 16 位版本? 如何确保 g++ 将构建 32 位或 64 位文件?我正在网上寻找,但还没有找到解决方案。 【参考方案1】:

WSL 是一个 Linux 层,它的gcc 将生成 Linux 可执行文件。通过 WSL 运行它们当然可以,但是如果您尝试在普通 Windows 中运行它们,Windows 会向您耸耸肩。

如果你想从 Linux 编译 Windows 可执行文件,你需要使用 gcc 多目标,本质上是使用在 Linux 下编译的 Windows gcc 版本。

问题与 16 位代码无关,这只是 Windows 对您提供的奇怪可执行文件的最佳猜测。

【讨论】:

【参考方案2】:

我想说的是,Linux 和 Windows 中可执行文件的文件格式不同,所以你不能把你在 Linux 上构建的东西(即在 WSL 中)拿来在 Windows 上运行。

可执行文件格式存在各种特定于操作系统的东西,导致它们不兼容,甚至在您开始与操作系统和编译器的标准库交互之前。

【讨论】:

以上是关于cpp exe文件在wsl上工作但在windows10 cmd上不工作的主要内容,如果未能解决你的问题,请参考以下文章

windows新增右键菜单,通过wsl中的vim打开文件

windows新增右键菜单,通过wsl中的vim打开文件

windows新增右键菜单,通过wsl中的vim打开文件

Windows10 Linux子系统安装/迁移到非系统盘

Windows10 Linux子系统安装/迁移到非系统盘

Windows 进程和 WSL Linux 进程之间的共享内存