В последнее время я очень расстроен SDL2. Из вариантов здесь, так что смотрим с некоторой помощью от кого-то знающего. Я пытаюсь заставить эту черную работу работать в Windows 8.1. У меня не было проблем с использованием первого SDL на Windows 7, который прошел с легким ветром. Однако SDL2 - это не тот же случай.Ничего не происходит, когда программа запускается (и не создается Окно)
Я следую учебным пособиям по «http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/codeblocks/index.php», используя самые последние обновленные кодовые блоки + выпуск minGW32. Я также пробовал это на Orwell Dev C++ + minGW32. Тем не менее, происходит что-то очень странное, чего я никогда не видел в программировании. Мой компилятор не дает мне никаких ошибок. Однако, когда программа запускается, ничего не происходит. Окно должно быть создано и отложено на несколько секунд. Я также попробовал учебник части 2, чтобы показать изображение, и снова ничего не происходит.
Я удостоверился, что ни одна из программ не заблокирована брандмауэром Windows и не запускала программу и .exe в качестве администратора.
Компилятор не дает ошибок.
SDL2.dll находится в папке .exe.
Я скачал SDL2.0.3 по ссылке на веб-сайте и загружены и применены исправления для этого один шаткий файл .h, который дает компилятор ошибки в SDL2.0.3 но не SDL2.0.0 загруженному в https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h
Я добавил папку lib и include в опции Compiler для SDL2.0.3.
Я добавил компоновщика строку: -lmingw32 -lSDL2main -lSDL2 (также попытался -lmingw32 -lSDL2 -lSDL2main и как 10 других вещей, найденных на форумах).
Я пробовал использовать как компиляторы Debug, так и Release.
Я попытался создать программу как приложение для графического интерфейса пользователя и консольное приложение. В SDL1 я скомпилирован как графическое приложение. В SDL2 этот просто компилируется, но при запуске он абсолютно ничего не делает. Когда бежал как консольное приложение, консоль окна всплывает, программа перестает отвечать на запросы, а затем консоль показывает процесс вышел после 6,357 секунд с возвращаемым значением 255.
Я следовал всем инструкциям в точности используя как Code :: Blocks, так и Dev C++ IDE, и я все равно ничего не получаю, такие же результаты. Работал в течение 2 дней. Что во имя Бога происходит, чтобы вызвать у меня весь этот стресс? Если у вас есть предложения или вы испытали эту трагедию, пожалуйста, помогите! T.T
Код очень простой, как показано:
//Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main(int argc, char* args[])
{
//The window we'll be rendering to
SDL_Window* window = NULL;
//The surface contained by the window
SDL_Surface* screenSurface = NULL;
//Initialize SDL
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
}
else
{
//Create window
window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if(window == NULL)
{
printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
}
else
{
//Get window surface
screenSurface = SDL_GetWindowSurface(window);
//Fill the surface white
SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF));
//Update the surface
SDL_UpdateWindowSurface(window);
//Wait two seconds
SDL_Delay(2000);
}
}
//Destroy window
SDL_DestroyWindow(window);
//Quit SDL subsystems
SDL_Quit();
return 0;
}
Это выход компилятор из Dev C++:
Compiling Project Changes...
--------
- Project File: C:\Users\Giovanni\Desktop\test\GioGame\GioGame.dev
- Compiler Name: MinGW GCC 4.8.1 32-bit Debug
Building makefile...
--------
- Filename: C:\Users\Giovanni\Desktop\test\GioGame\Makefile.win
- Output File: C:\Users\Giovanni\Desktop\test\GioGame\GioGame.exe
Processing makefile...
--------
- Makefile Processor: C:\Program Files (x86)\Dev-Cpp\MinGW32\bin\mingw32-make.exe
- Command: mingw32-make.exe -f "C:\Users\Giovanni\Desktop\test\GioGame\Makefile.win" all
g++.exe -c 01_hello_SDL.cpp -o 01_hello_SDL.o -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.8.1/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.8.1/include/c++" -I"C:/Users/Giovanni/Desktop/test/SDL2.0.3/include/SDL2" -g3
g++.exe 01_hello_SDL.o -o GioGame.exe -L"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib" -L"C:/Program Files (x86)/Dev-Cpp/MinGW32/mingw32/lib" -L"C:/Users/Giovanni/Desktop/test/SDL2.0.3/lib" -static-libstdc++ -static-libgcc -lmingw32 -lSDL2main -lSDL2 -g3
Compilation Results...
--------
- Errors: 0
- Warnings: 0
- Output Size: 143.41796875 KiB
- Compilation Time: 2.86s
Наконец решена. Поскольку у меня было чувство, это была какая-то проблема с Windows или Windows 8.1, просто заставляя меня веселиться. Я был очень осторожен и перезагружен SDL2.0.3 и повторно применил эту вещь патча для SDL_platform.h. THEN Я полностью удалил ВСЕ из IDE, которые я пробовал, переустановил Dev C++ в режиме совместимости с Windows 7. Как администратор на рабочем столе (то есть не в Program Files x86). Затем я настраиваю все снова и бам, это сработало.
Может быть проблема с администратором ОС Windows 8.1 BS shenanigans или режимом совместимости, или с поврежденной загрузкой ранее, или с SDL, который я использовал, или даже с тем, что он был установлен для программных файлов x86, у которых есть пробел в файле путь и ограниченные права, потому что окна.
Так проблема: потому что окна.
вы забыли опубликовать выходные данные своей программы ... вы также проверяете наличие ошибок после 'SDL_CreateWindow' –
Как я могу опубликовать выходные данные своей программы? После компиляции и запуска, в буквальном смысле ничего не происходит, или если он установлен как консольная программа, он просто открывает консольный блок и перестает отвечать на запросы. У меня такое чувство, что с этим и с Windows 8 есть какая-то ужасная связь, и я не прав. – Giovanni
@Giovanni Добавьте его в качестве ответа и примите его. Если у других такая же ошибка, они могут быстро найти решение. – Emz