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上不工作的主要内容,如果未能解决你的问题,请参考以下文章