Борьба с кодом ошибки 0xc000007b в Clion для всех программ - PullRequest
0 голосов
/ 22 ноября 2018

Я пытался провести много исследований о том, почему я получаю эту ошибку, и я вижу, что ошибка по существу означает BAD_IMAGE_FORMAT при загрузке 64-битного SDL в 32-битной программе.Однако я, кажется, получаю эту ошибку на ВСЕХ скомпилированных исполняемых файлах.

Небольшая справочная информация: я возился с SDL2 (также используя SDL2_image и SDL2_ttf).Когда я пытался создать простую игру «змейка» с расширением .exe, у меня возникла эта проблема.После некоторых исследований я решил сделать чистую установку mingw, используя 64-битную версию, используя только 64-битные библиотеки разработки для SDL2, SDL2_image и SDL2_ttf.После того, как я все еще не смог запустить .exe из-за кода ошибки 0xc000007b, я решил, что пойду попроще и проработаю каждую библиотеку, чтобы посмотреть, смогу ли я найти, в чем я ошибаюсь.Я начал с использования простой программы «Hello World»:

#include <iostream>
int main(int argc, char* argv[])
{
    std::cout << "Hello World" << std::endl;
    return 0;
}

с make-файлом:

cmake_minimum_required(VERSION 3.9)
project(HelloWorld)
set(CMAKE_CXX_STANDARD 11)
add_executable(HelloWorld main.cpp)

, который, конечно, создает (как отладку, так и выпуск) и работает без проблем.в Клионе.Тем не менее, при запуске исполняемого файла, который является сборкой, я все еще получаю код ошибки 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".Так что я действительно не уверен, что делать, так как кажется, что я не могу создать какие-либо автономные исполняемые файлы.

Пара примечаний здесь в конце.

  1. Есть убежищене было никаких других проблем с другими исполняемыми файлами на моем компьютере.(или те, которые не созданы мной с помощью Clion)

  2. Я на 64-битной машине (Windows).

  3. HelloПрограмма World работает без каких-либо dll в папке (только HelloWorld.exe).

  4. Я использую Clion.

  5. Программа написанав C ++

edit: в посте я не добавил # перед включением.Чтобы устранить любую путаницу в будущем, я написал вышеприведенный код вручную в посте (не копировал и не вставлял), поэтому, если в этом посте есть небольшие ошибки, их нет в моем реальном коде.

1 Ответ

0 голосов
/ 22 ноября 2018

В C ++ вы должны использовать using namespace std; и использовать cin, cout вместо scanf, printf (которые мы обычно используем в C)

Это пример кода:

#include<iostream>
using namespace std;
int main()
{
cout << “ Hello World”;
system(“pause”);
return 0;
}

Если вы хотите использовать printf или scanf в C ++, вы можете найти учебник в книге Professional in C ++

...