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位二进制的主要内容,如果未能解决你的问题,请参考以下文章