2013-10-02 2 views
3

В MinGW, работает г ++ на:MinGW г ++ производства (предположительно) 16 битный двоичный

#include <iostream> 

using namespace std; 

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

Счастливо создает бинарный файл, но если я пытаюсь запустить исполняемый файл с MinGW оболочки он жалуется на 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 
+0

Как это г ++ настроен? – MSalters

+0

Как это проверить? – mrmagooey

+0

Параметры командной строки '--version' и' --target-help'. – MSalters

ответ

2

Столкнулся аналогичный вопрос, который оказался глупой ошибкой: с помощью опции -c в дополнение к опции -o. Если предположить, что код выше в 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 
+0

Таким образом, вы получаете файл с исполняемым расширением, но не PE-подпись (поскольку он не является исполняемым файлом). Windows обрабатывает файл, который его попросили выполнить, но не имеет исполняемой сигнатуры в качестве 16-разрядного файла MS-DOS .com. –

Смежные вопросы