J'ai donc essayé pour la première fois de compiler et d'exécuter une "application" c++ que j'ai faite (en essayant de faire un exercice facile pour ma petite amie) mais en essayant de l'exécuter sur Powershell, j'ai eu cette erreur :

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

Le code est juste une tentative de faire ma propre liste (enfin, ce n'est pas encore entièrement codé, mais j'ai l'impression que c'est plus lié au système qu'au code...)

Quand je n'avais qu'un ordinateur portable, j'ai codé sur Code :: Blocks, mais là j'ai essayé de compiler et d'exécuter via des lignes de commande sur un ordinateur de bureau, et je ne sais pas si je dois installer quoi que ce soit pour que cela fonctionne ou si cela devrait marcher.

Le contenu du makefile :

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

Je l'ai pris d'un vieil exercice que je devais faire et je l'ai réorganisé pour qu'il fonctionne avec ma tentative actuelle et je suis presque sûr que cela devrait bien fonctionner, donc je ne sais pas ce qui ne fonctionne pas.

Si besoin : le fichier 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;
}

ÉDITER:

Résultat de 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.

Information système:

System Type:               x64-based PC

RÉ-ÉDITER :

Erreur trouvée, c'était dans le makefile... Comme je l'ai copié depuis un ancien projet, je ne l'ai pas copié correctement, voici la version la plus correcte :

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)

Il ne compile plus maintenant, mais parce que j'ai évidemment fait des erreurs dans le code et que j'essaie de les corriger.

Merci beaucoup à tous, et surtout à mklement0 pour avoir essayé d'aider, c'était très agréable de voir à quel point cette communauté est sympa !

RÉ-RÉ-ÉDITER :

Cela fonctionne maintenant très bien :D

1
Thrudon 27 janv. 2020 à 20:22

1 réponse

Meilleure réponse

Remarque : Cette réponse fournit des informations générales : cela peut ou non résoudre votre problème.

Le problème est que Windows ne sait pas comment appeler votre exécutable, car il n'utilise pas le format de fichier binaire requis.

Vous dites que vous avez utilisé MinGW pour compiler votre exécutable, qui est conçu pour créer des applications Windows natives.

Étant donné qu'un fichier accidentellement vide n'est pas votre problème (voir ci-dessous), vous devez rechercher quel type de format de fichier exécutable votre processus de compilation MinGW utilise réellement pour le fichier .\bin\Exercice_1.exe.


Une raison possible de votre symptôme est :

Si .\bin\Exercice_1.exe s'avère être un fichier vide (0 octets) plutôt que l'exécutable attendu, le résultat serait le message d'erreur que vous avez vu :

# 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.
...

Vous devez ensuite rechercher comment le fichier .\bin\Exercice_1.exe vide a été créé accidentellement et pourquoi votre compilation n'y a pas placé d'exécutable valide.

0
mklement0 27 janv. 2020 à 19:29