Ошибка при попытке выполнить C ++ на Windows (скомпилировано через MinGW) - PullRequest
1 голос
/ 27 января 2020

Итак, я впервые попытался скомпилировать и запустить «приложение» на c ++, которое я сделал (пытаясь сделать простое упражнение для моей подруги), но при попытке запустить его на Powershell я получил эту ошибку:

Program 'Exercice_1.exe' failed to run: The specified executable is not a valid application for this OS platform.At
line:1 char:1
+ .\bin\Exercice_1.exe
+ ~~~~~~~~~~~~~~~~~~~~.
At line:1 char:1
+ .\bin\Exercice_1.exe
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedException
    + FullyQualifiedErrorId : NativeCommandFailed

Код - это просто попытка создать собственный список (ну, он еще не полностью закодирован, но я чувствую, что он больше связан с системой, чем с кодом ...)

Когда У меня был только ноутбук, я кодировал Code :: Blocks, но там я попытался скомпилировать и запустить с помощью командной строки на настольном компьютере, и я не знаю, нужно ли что-то устанавливать, чтобы это работало или должно ли работа.

Содержимое make-файла:

CC = g++
CFLAG = -Wall -pedantic
STD = -std=c++11
SRC = src/
INC = include/
OBJ = object/
BIN = bin/

$(BIN)Exercice_1.exe: $(SRC)Exercice_1.cpp $(OBJ)Liste.o $(OBJ)Maillon.o
    $(CC) $(STD) -o $@ -c $< $(CFLAG)

$(OBJ)Liste.o: $(SRC)Liste.cpp $(INC)Liste.h $(INC)Maillon.h
    $(CC) $(STD) -o $@ -c $< $(CFLAG)

$(OBJ)Maillon.o: $(SRC)Maillon.cpp $(INC)Maillon.h
    $(CC) $(STD) -o $@ -c $< $(CFLAG)

clean:
    rm -f -R object/*.o
    rm -f -R *~

mrproper: clean
    rm -f $(BIN)*.exe

Я взял его из старого упражнения, которое мне пришлось сделать, и переставил его для работы с моей текущей попыткой, и я почти уверен, что он должен работать ну, я не знаю, что не работает.

При необходимости: файл Exercice_1. cpp:

#include <iostream>

#include "../include/Maillon.h"
#include "../include/Liste.h"

int main(int argc, char* argv[]) {
    Maillon<int>* maillon = new Maillon<int>(7);
    std::cout << maillon->get_info() << std::endl;

    return 0;
}

РЕДАКТИРОВАТЬ:

Результат g++ --version

g++.exe (MinGW.org GCC-8.2.0-5) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Системная информация:

System Type:               x64-based PC

РЕДАКТИРОВАТЬ:

Обнаружена ошибка, это было в make-файле ... Поскольку я скопировал его из старого проекта, я не скопировал его правильно, вот более правильная версия:

CC = g++
CFLAG = -Wall -pedantic
STD = -std=c++11
SRC = ./src/
INC = ./include/
OBJ = ./object/
BIN = ./bin/

$(BIN)Exercice_1.exe: $(OBJ)Exercice_1.o $(OBJ)Liste.o $(OBJ)Maillon.o
    $(CC) $(STD) -o $@ $^ $(CFLAG)

$(OBJ)Exercice_1.o: $(SRC)Exercice_1.cpp $(INC)Liste.h $(INC)Maillon.h
    $(CC) $(STD) -o $@ -c $< $(CFLAG)

$(OBJ)Liste.o: $(SRC)Liste.cpp $(INC)Liste.h $(INC)Maillon.h
    $(CC) $(STD) -o $@ -c $< $(CFLAG)

$(OBJ)Maillon.o: $(SRC)Maillon.cpp $(INC)Maillon.h
    $(CC) $(STD) -o $@ -c $< $(CFLAG)

Теперь он не компилируется, но потому что я, очевидно, сделал ошибки в коде и пытаюсь их исправить.

Большое спасибо всем, и в основном mklement0 за попытку помочь, было очень приятно видеть, насколько хорошо это сообщество!

RE-RE-EDIT:

Теперь работает нормально: D

1 Ответ

0 голосов
/ 27 января 2020

Примечание : Этот ответ содержит справочную информацию : может решить или не решить вашу проблему.

Проблема заключается в том, что Windows не ' не знает, как вызвать ваш исполняемый файл, потому что он не использует требуемый двоичный формат файла .

Вы говорите, что использовали MinGW для компиляции вашего исполняемого файла, который предназначен для создания собственных Windows приложений.

Поскольку случайно пустой файл является , а не вашей проблемой (см. Ниже), вам необходимо выясните, какой тип формата исполняемого файла ваш процесс компиляции MinGW фактически использует для файла .\bin\Exercice_1.exe.


A возможные причина вашего признака:

Если .\bin\Exercice_1.exe оказывается пустым (0 байт) файлом, а не ожидаемым исполняемым файлом, в результате вы увидите сообщение об ошибке:

# Create an empty *.exe file and try to invoke it.
PS> $null | Set-Content notreal.exe; ./notreal

Program 'notreal.exe' failed to run: The specified executable is not a valid application for this OS platform.
...

Затем вам нужно исследовать как случайно был создан пустой .\bin\Exercice_1.exe файл и почему ваша компиляция не поместил туда допустимый исполняемый файл.

...