因此,我第一次尝试编译并运行一个我做过的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/