MinGW g++ 生产(据称)16位二进制

Posted

技术标签:

【中文标题】MinGW g++ 生产(据称)16位二进制【英文标题】:MinGW g++ producing (allegedly) 16 bit binary 【发布时间】:2013-10-02 03:57:17 【问题描述】:

在 MinGW 中,运行 g++:

#include <iostream>

using namespace std; 

int main()

  cout<<"hi";
  return 0;

很高兴创建了一个二进制文件,但是如果我尝试从 MinGW shell 运行二进制文件,它会抱怨Bad file number,如果我尝试从 Windows 运行它,它会抱怨二进制文件是 16 位文件。有没有我应该传递给 g++ 的开关?

NB 全新安装 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++ 是如何配置的? --version--target-help 命令行选项。 -v 选项(不是--version)告诉您构建 GCC 的目标。 【参考方案1】:

遇到了一个类似的问题,结果证明是一个愚蠢的错误:在 -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 文件。

以上是关于MinGW g++ 生产(据称)16位二进制的主要内容,如果未能解决你的问题,请参考以下文章

循环冗余验证码 生成多项式 如何 转换成二进制数

QT用VS还是MINGW编译好,有啥区别

MAC地址也叫物理地址或硬件地址,由网络设备制造商生产时写入硬件内部,该地址由多少位二进制组成?

位操作符理解小技巧

MAC 多少个字节 是8还是6

利用C一种最有效的文件存储方式——16bit有符号位2进制存储