我一直在尝试研究为什么会出现此错误,并且我发现在32位程序上加载64位SDL时,该错误实质上意味着BAD_IMAGE_FORMAT。但是我似乎在所有编译的可执行文件上都收到此错误。
背景信息:我一直在搞弄SDL2(也使用SDL2_image和SDL2_ttf)。当我试图获取一个简单的以.exe格式构建的蛇游戏时,我开始遇到此问题。经过一番研究,我决定使用64位,并且只为SDL2,SDL2_image和SDL2_ttf使用64位开发库来全新安装mingw。由于错误代码0xc000007b仍然无法启动.exe之后,我决定简化工作,并逐一遍历每个单独的库,看看是否可以找到我要去的地方。我首先使用一个简单的“ Hello World”程序:
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "Hello World" << std::endl;
return 0;
}
带有makefile:
cmake_minimum_required(VERSION 3.9)
project(HelloWorld)
set(CMAKE_CXX_STANDARD 11)
add_executable(HelloWorld main.cpp)
当然可以构建(调试和发布)并且可以在Clion中正常运行。但是,在运行生成的可执行文件时,我仍然收到错误代码0xc000007b,并且我的可执行文件无法启动。在这一点上,我感到事情开始变得有些奇怪,因此我决定通过运行依赖项遍历器并分析我的可执行文件来接受一个常见建议。 似乎对于所有东西(SDL2程序或简单的hello world程序),conhost.exe都失败了。以下是依赖关系遍历器的最后几条语句。
Loaded "CLBCATQ.DLL" at address 0x00007FFFCFC50000. Successfully hooked module.
DllMain(0x00007FFFCFC50000, DLL_PROCESS_ATTACH, 0x0000000000000000) in "CLBCATQ.DLL" called.
DllMain(0x00007FFFCFC50000, DLL_PROCESS_ATTACH, 0x0000000000000000) in "CLBCATQ.DLL" returned 1 (0x1).
onecore\windows\core\console\open\src\host\srvinit.cpp(411)\conhost.exe!00007FF6EA38C372: (caller: 00007FF6EA388CD9) ReturnHr(3) tid(54b4) 80070032 The request is not supported.
onecore\windows\core\console\open\src\server\devicecomm.cpp(153)\conhost.exe!00007FF6EA38A79A: (caller: 00007FFFCF553034) ReturnHr(4) tid(54b4) 800700E9 No process is on the other end of the pipe.
Exited "CONHOST.EXE" (process 0x5150) with code 0 (0x0).
因此,我已经阅读了有关Conhost的一些冲突文章,已经阅读了它是恶意软件,但我认为情况并非如此,因为我看不到任务管理器中正在运行conhost.exe(似乎表明存在恶意软件)。我唯一的线索是conhost指的是“ Console Window Host”。因此,我真的不确定该怎么做,因为看来我无法构建任何独立的可执行文件。
结尾处有两个音符。
我的计算机上的其他可执行文件没有任何其他问题。 (又名不是我使用Clion构建的)
我在64位计算机上(Windows)。
Hello World程序正在运行,文件夹中没有任何dll(仅 HelloWorld.exe)。
我正在使用Clion。
程序是用C ++编写的
edit:在帖子中,我没有在include之前添加#。为了消除将来的混乱,我在帖子中手动编写了上面的代码(没有复制和粘贴),因此,如果这篇文章中有很少的错误,则它们不会出现在我的实际代码中。
答案 0 :(得分:-1)
在C ++中,您应该使用using namespace std;
并使用cin
,cout
而不是scanf
,printf
(我们通常在C语言中使用)
这是示例代码:
#include<iostream>
using namespace std;
int main()
{
cout << “ Hello World”;
system(“pause”);
return 0;
}
如果您想在C ++中使用printf
或scanf
,可以在《 C ++专业》一书中查找该教程。