MinGW g++生成(据称)16位二进制文件。

5

在MinGW中,运行g++命令:

#include <iostream>

using namespace std; 

int main()
{
  cout<<"hi";
  return 0;
}

开心地创建了一个二进制文件,但如果我尝试从MinGW shell运行该二进制文件,它会报告“坏文件号”,如果我尝试从Windows运行它,则会抱怨该二进制文件是16位的。我应该传递什么开关给g++吗?
注:Msys和MinGW都是新安装的,之前安装过cygwin。
编辑
>> g++ --version
g++.exe (GCC) 4.8.1

>> g++ --target-help
... three screens worth of target options

>> g++ -print-search-dirs
 install: c:\mingw\bin\../lib/gcc/mingw32/4.8.1/
 programs:=c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/;c:/mingw/bin/../libexec/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/mingw32/4.8.1/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/
 libraries: =c:/mingw/bin/../lib/gcc/mingw32/4.8.1/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/mingw32/4.8.1/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../mingw32/4.8.1/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../;/mingw/lib/mingw32/4.8.1/;/mingw/lib/

>> g++ -print-libgcc-file-name 
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/libgcc.a

g++ 配置好了吗? - MSalters
--version--target-help 命令行选项。 - MSalters
“-v”选项(而不是“--version”)告诉您GCC构建的目标。 - Michael Burr
1个回答

4
遇到了一个类似的问题,最后发现是个愚蠢的错误:使用了-o选项之外的-c选项。假设上面的代码在main.cpp中:
$ g++ -std=c++11 -c main.cpp -o test.exe
$ test.exe
sh: ./test.exe: Bad file number

去掉 -c 解决了问题(因为这意味着“编译和汇编但不链接”)。
$ g++ -std=c++11 main.cpp -o test.exe
$ test.exe
hi

因此,您最终得到一个具有可执行扩展名但没有PE签名(因为它不是可执行文件)的文件。Windows将被要求执行但没有可执行签名的文件视为16位MS-DOS .com文件。 - Michael Burr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接