因此,我第一次尝试编译并运行一个我做过的c++“应用”(试图为我的女 friend 做一个简单的练习),但是当尝试在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上进行了编码,但在那里我尝试通过台式机上的命令行进行编译和运行,并且我不知道是否需要安装任何东西才能使其正常工作或应该管用。

生成文件的内容:
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

重新编辑:

发现错误,它在makefile中...
当我从旧项目复制它时,我没有正确复制它,这是更正确的版本:
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的帮助,非常高兴看到这个社区有多棒!

重新编辑:

现在可以正常使用了:D

最佳答案

注意:此答案提供背景信息:可能会或可能不会解决您的问题。

问题在于 Windows不知道如何调用可执行文件,因为它不使用必需的二进制文件格式

您说您已经使用MinGW来编译可执行文件,该可执行文件旨在创建本机Windows应用程序。

由于不是意外的空文件不是问题(请参见下文),因此您需要调查MinGW编译过程实际上将哪种类型的可执行文件格式用于.\bin\Exercice_1.exe文件。

您的症状的可能原因是:

如果.\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文件,以及为什么您的编译没有在其中放置有效的可执行文件。

关于c++ - 尝试在Windows上执行C++时出错(通过MinGW编译),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59935995/

10-14 16:38
查看更多