CMake и MinGW w64 и системные библиотеки Windows - PullRequest
0 голосов
/ 29 мая 2018

начинаю учить CMake.Я хочу построить свое приложение с библиотекой SDL2, используя MinGW w64.Я генерирую Makefiles и использую mingw32-make для создания своего приложения.Но мое приложение не запускается без каких-либо сообщений (моя ОС - Windows 10).Сначала я подумал, что мое приложение не видит зависимости.Я пытаюсь использовать DependencyWalker и выяснить следующее.Мое приложение не видит библиотеки, такие как

API-MS-WIN-CORE-APIQUERY-L1-1-0.DLL API-MS-WIN-CORE-APPCOMPAT-L1-1-0.DLL API-MS-WIN-CORE-APPCOMPAT-L1-1-1.DLL API-MS-WIN-CORE-APPINIT-L1-1-0.DLL

и многие другие API-MS-WIN библиотеки.Как я вижу, эти библиотеки лежат в C:\Windows\System32 и в C:\Windows\SysWOW64.Когда я создаю свое приложение, я связываю следующие библиотеки -lmingw32 -lSDL2main -lSDL -mwindows, и оно связывает без каких-либо ошибок, а DependencyWalker не говорит об этом ничего плохого.Почему мое встроенное приложение не видит системные библиотеки Windows?В моей среде PATH есть каталог System32, но нет SysWOW64.Может быть, проблема в этом?

ОБНОВЛЕНИЕ

Я пытаюсь добавить в среду PATH SysWOW64, и это не помогает.Добавить DependecyWalker скриншоты

один

два

три

ОБНОВЛЕНИЕ 2

свернуто

1 Ответ

0 голосов
/ 03 июня 2018

О нет!Я сделал большую ошибку.Моя проблема не Windows DLL.Я следую этому руководству.Я не написал часть кода, где создаются окна.Мой код был

//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
    {
        //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 );
    }
}

Будьте осторожны, когда пишете код из примеров :) Я исправил это, добавив пропущенную часть.Теперь моя программа работает нормально.

...