На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: JoeUser, Qraizer, Hsilgos
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Не работает метод SDL_Init библиотеки SDL
Я выполнила все условия из этого видео https://www.youtube.com/watch?v=QQzAHcojEKg по подключении библиотеки SDL однако при вызове некоторых методов выдаёт ошибку вот код:
Game.hpp
ExpandedWrap disabled
    #ifndef Game_hpp
    #define Game_hpp
    #include "SDL.h"
    #include <stdio.h>
     
    class Game{
    public: Game();
             ~Game();
         void init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen);
         void handleEvents();
         void update();
         void render();
         void clean();
         bool running() {return isRunning;}
    private:
        bool isRunning;
        SDL_Window *window;
        SDL_Renderer *renderer;
     
     
    };
    #endif

Game.cpp <- здесь выдаёт ошибку SDL_Init

ExpandedWrap disabled
    #include "stdafx.h"
    #include <iostream>
    #include "Game.hpp"
     
     
     
    Game::Game()
    {}
    Game::~Game()
    {}
    void Game::init(const char *title, int xpos, int ypos, int width, int height, bool fullscreen)
    {
        if(SDL_Init(SDL_INIT_EVERYTHING)==0)
        {
            std::cout << "Subsystems Initialised!..." << std::endl;
        }
    }
    void Game::handleEvents()
    {}
    void Game::update()
    {}
    void Game::render()
    {}
    void Game::clean()
    {}

GameRPG.cpp
ExpandedWrap disabled
    // GameRPG.cpp: главный файл проекта.
     
    #include "stdafx.h"
     
    using namespace System;
     
    int main(int argc, const char * argv[])
    {
        
    }

Суть ошибки
Цитата

1>Game.obj : error LNK2028: ссылка на неразрешенную лексему (0A000312) "extern "C" int __cdecl SDL_Init(unsigned int)" (?SDL_Init@@$$J0YAHI@Z) в функции "public: void __thiscall Game::init(char const *,int,int,int,int,bool)" (?init@Game@@$$FQAEXPBDHHHH_N@Z)
1>Game.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __cdecl SDL_Init(unsigned int)" (?SDL_Init@@$$J0YAHI@Z) в функции "public: void __thiscall Game::init(char const *,int,int,int,int,bool)" (?init@Game@@$$FQAEXPBDHHHH_N@Z)
Немножко в сторону, но пишут...:
ExpandedWrap disabled
    bool init()
    {
        //Initialize all SDL subsystems
        if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
        {
            return false;
        }
И вообще, там SDL есть разных версий; было качественное изменение в LIB'ах с версии 1.xxx ко второй. Проверьте, какую используете. :blush:

Добавлено
П.С. в самих *.h-файлах нет ничего про компоновку *.lib-файлов, а у вас проблему выдаёт компоновщик. Пропишите сами добавку SDL.lib где-то в настройках.
Цитата
И вообще, там SDL есть разных версий; было качественное изменение в LIB'ах с версии 1.xxx ко второй. Проверьте, какую используете.


Я поставила, эту версию http://libsdl.org/download-2.0.php
user posted image.
У меня Visual C++ 2008 года. Эта версия SDL совместима с моей версией программы?
Сообщение отредактировано: Katerina1993 -
Конечно. Библиотеки укажите в проекте (ну или строчку добавьте:
ExpandedWrap disabled
    #pragma comment( lib, "SDL.lib" )

)
Всё равно не работает. Сейчас я пошагово опишу свои действия. Настройки и запуск первой программы.
Создаю новый проект
Файл создать Visual c++ Консольное приложение CLR.
Заменяю код
ExpandedWrap disabled
    // awdsdw.cpp: главный файл проекта.
     
    #include "stdafx.h"
     
    using namespace System;
     
    int main(array<System::String ^> ^args)
    {
        Console::WriteLine(L"Здравствуй, мир!");
        return 0;
    }

на
ExpandedWrap disabled
    #include "stdafx.h"
     
     
    using namespace System;
     
    int main(int argc, char *argv[])
    {
     
    return 0;
    }

Делаю настройки
1. Проект->свойство
2. С/C++ Общие->Дополнительные каталоги включения->C:\SDL2\include
3. Компоновщик->Общие->Дополнительные каталоги библиотек->C:\SDL2\lib\x64
4. Компоновщик->Ввод
SDL2.lib
SDL2main.lib
5. Система->Подсистема->Консоль (/SUBSYSTEM:CONSOLE)
6. Перехожу в эту папку (C:\SDL2\lib\x64) беру файл SDL2.dll и копирую в папку с файлом проекта (для надёжности ещё в несколько папок включая главный проект).

Да кстати в коде
ExpandedWrap disabled
    #pragma comment( lib, "SDL.lib")

ошибка раз библиотека SDL2.lib, то и подключать надо SDL2.lib. Вот так:
ExpandedWrap disabled
    #pragma comment( lib, "SDL2.lib")

Создаю тестовый код из видео урока.

ExpandedWrap disabled
    // test_sdl.cpp: главный файл проекта.
     
    #include "stdafx.h"
    #include "SDL.h"
    #pragma comment( lib, "SDL2.lib")
     
    using namespace System;
     
    int main(int argc, char *argv[])
    {
        SDL_Init(SDL_INIT_EVERYTHING);
        SDL_Window *window = SDL_CreateWindow("title",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,600,400,SDL_WINDOW_SHOWN);
        SDL_Renderer *renderer = SDL_CreateRenderer(window,-1,0);
        SDL_SetRenderDrawColor(renderer,0,255,0,255);
        SDL_RenderClear(renderer);
        SDL_RenderPresent(renderer);
        SDL_Delay(3000);
     
        return 0;
    }


Выдаёт следующие ошибки. Самое интересное, что при написании кода, если нажать CTRL-Space для вызова подсказок (методов и свойств). Все методы которые начинаются с префикса SDL корректно отображаются, но почему-то всё равно не работает.
Цитата

1>test_sdl.obj : warning LNK4248: неразрешенная лексема TypeRef (01000011) для "SDL_Renderer"; образ нельзя запустить
1>test_sdl.obj : warning LNK4248: неразрешенная лексема TypeRef (01000012) для "SDL_Window"; образ нельзя запустить
1>test_sdl.obj : error LNK2028: ссылка на неразрешенную лексему (0A00007F) "extern "C" void __cdecl SDL_Delay(unsigned int)" (?SDL_Delay@@$$J0YAXI@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2028: ссылка на неразрешенную лексему (0A000080) "extern "C" void __cdecl SDL_RenderPresent(struct SDL_Renderer *)" (?SDL_RenderPresent@@$$J0YAXPAUSDL_Renderer@@@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2028: ссылка на неразрешенную лексему (0A000081) "extern "C" int __cdecl SDL_RenderClear(struct SDL_Renderer *)" (?SDL_RenderClear@@$$J0YAHPAUSDL_Renderer@@@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2028: ссылка на неразрешенную лексему (0A000082) "extern "C" int __cdecl SDL_SetRenderDrawColor(struct SDL_Renderer *,unsigned char,unsigned char,unsigned char,unsigned char)" (?SDL_SetRenderDrawColor@@$$J0YAHPAUSDL_Renderer@@EEEE@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2028: ссылка на неразрешенную лексему (0A000083) "extern "C" struct SDL_Renderer * __cdecl SDL_CreateRenderer(struct SDL_Window *,int,unsigned int)" (?SDL_CreateRenderer@@$$J0YAPAUSDL_Renderer@@PAUSDL_Window@@HI@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2028: ссылка на неразрешенную лексему (0A000084) "extern "C" struct SDL_Window * __cdecl SDL_CreateWindow(char const *,int,int,int,int,unsigned int)" (?SDL_CreateWindow@@$$J0YAPAUSDL_Window@@PBDHHHHI@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2028: ссылка на неразрешенную лексему (0A000085) "extern "C" int __cdecl SDL_Init(unsigned int)" (?SDL_Init@@$$J0YAHI@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" void __cdecl SDL_Delay(unsigned int)" (?SDL_Delay@@$$J0YAXI@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" void __cdecl SDL_RenderPresent(struct SDL_Renderer *)" (?SDL_RenderPresent@@$$J0YAXPAUSDL_Renderer@@@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __cdecl SDL_RenderClear(struct SDL_Renderer *)" (?SDL_RenderClear@@$$J0YAHPAUSDL_Renderer@@@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __cdecl SDL_SetRenderDrawColor(struct SDL_Renderer *,unsigned char,unsigned char,unsigned char,unsigned char)" (?SDL_SetRenderDrawColor@@$$J0YAHPAUSDL_Renderer@@EEEE@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" struct SDL_Renderer * __cdecl SDL_CreateRenderer(struct SDL_Window *,int,unsigned int)" (?SDL_CreateRenderer@@$$J0YAPAUSDL_Renderer@@PAUSDL_Window@@HI@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" struct SDL_Window * __cdecl SDL_CreateWindow(char const *,int,int,int,int,unsigned int)" (?SDL_CreateWindow@@$$J0YAPAUSDL_Window@@PBDHHHHI@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
1>test_sdl.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __cdecl SDL_Init(unsigned int)" (?SDL_Init@@$$J0YAHI@Z) в функции "extern "C" int __cdecl SDL_main(int,char * * const)" (?SDL_main@@$$J0YAHHQAPAD@Z)
Сообщение отредактировано: Katerina1993 -
Эм-м-м... думаю все косяки начинаются от "консольности CLR".
Попробуйте для начала такие действия:
1. Создайте консольное для Win32 (потом можно будет поколдовать как переделать для универсума).
2. Уберите все вызовы SDL'а, кроме Init'а (с него бы начать, попробовать собрать).
;)
Другая теперь ошибка, создаю проект Win32 консольное приложение, даже подключила дополнительные библиотеки.
Цитата

win32->Консольное приложение Win32
Далее->готово (всё оставила по умолчанию)

ExpandedWrap disabled
    // firstsdl.cpp: определяет точку входа для консольного приложения.
    //
    #pragma comment(lib, "SDL2main.lib")
    #pragma comment(lib, "SDL2.lib")
    #pragma comment(lib, "SDL2test.lib")
     
    #include "stdafx.h"
    #include<conio.h>
     
    #include <stdlib.h>
    #include <SDL.h>
     
    #pragma comment( lib, "SDL2.lib")
    //using namespace System;
     
    int _tmain(int argc, _TCHAR* argv[])
    {
        //SDL_Init();
        SDL_Init(SDL_INIT_EVERYTHING);
        getch();
        return 0;
        
    }

Цитата
error LNK2019: ссылка на неразрешенный внешний символ _SDL_Init в функции _wmain


Решила попробовать Win32->проект win32 произвела все настройки и добавила код в том месте где рекомендуют добавить код:
ExpandedWrap disabled
    ...
    // TODO: разместите код здесь.
    SDL_Init(SDL_INIT_EVERYTHING);
     
    MSG msg;
    HACCEL hAccelTable;
    ...

Ошибка:
Цитата

error LNK2019: ссылка на неразрешенный внешний символ _SDL_Init в функции _wWinMain@16
Надо же SDL.H в двойных кавычках брать(в include), а не в угловых скобках. :)
П.С. не уверен, что это принципиально, впрочем.
Вообще-то ошибка происходит на стадии линковки, так что SDL.H нормально подключился (во что бы он ни был заключён в #unclude).
А линковщик жалуется, что библиотека, в которой функции SDL находятся, к проекту не подключена.
Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
тут есть пример
Может оказаться полезным такое мероприятие:
www.ya.ru, ищем "sdl2 c++"
Сообщение отредактировано: ЫукпШ -
Подпись была выключена в связи с наложенным заземлением.
Кажется работает, пока сама не поняла. Видимо была не совместимость версии (нужна SDL-devel-1.2.14-VC8) вот откуда я брала пример Прикручиваем SDL к Visual Studio 2008. Вот ещё видео с youtube. vs2008-sdl-helloworld.
Теперь мне интересно как запустить так, чтобы отображался printf? Сборку я делала в ручную руководствуясь видео с youtube, т.е. я создала windows проект->пустой проект, а сам пример c ЖЖ. Там если перейти по первой ссылки то там вывод на экран происходит через printf. У меня не чего не выводится просто компилируется запускается экран мигает и всё, как вывести printf?
Сообщение отредактировано: Katerina1993 -
Цитата Katerina1993 @
У меня не чего не выводится просто компилируется запускается экран мигает и всё, как вывести printf?

Если запускается консоль и тут же пропадает. Тогда это просто окно консоли закрывается и ты не успеваешь увидеть надписи. Нужно либо запускать по Ctrl+F5(запуск без отладки). Либо запускать в консоли любой(cmd, far,...), либо добавить паузу/задержку перед выходом из программы. (Ну или как вариант бесконечный цикл выход которого нажатие любой клавиши например.).
Цитата Katerina1993 @
У меня не чего не выводится просто компилируется запускается экран мигает и всё, как вывести printf?

printf - это вывод в консольное окно.
А библиотека мастерит графическое окошко.
Поэтому никак.
А для каких целей нужен printf ?
Подпись была выключена в связи с наложенным заземлением.
Цитата ЫукпШ @
printf - это вывод в консольное окно.
А библиотека мастерит графическое окошко.
Поэтому никак.
Натыкался как-то на элементарные примеры (SDL или нет - не помню) когда программа создаёт обычное граф. окно, а вывод продолжает вываливаться в оставшееся консольное. Может сударыне именно такое нужно?! Бывает такое, надо поискать. :blush:

Добавлено
Во, нашёл! Это в glut'е было:
ExpandedWrap disabled
    int main ( int argc, char * argv [] )
    {
        // initialize glut
        glutInit            ( &argc, argv );
        glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
        glutInitWindowSize  ( 500, 500 );
     
        // prepare context for 3.3
        glutInitContextVersion ( 3, 3 );
        glutInitContextFlags   ( GLUT_FORWARD_COMPATIBLE | GLUT_DEBUG );
        glutInitContextProfile ( GLUT_CORE_PROFILE );
     
        // create window
        glutCreateWindow ( "Geometry shader example - particles" );
     
        glewExperimental = GL_TRUE;
     
        glewInit ();
     
        if ( !GLEW_VERSION_3_3 )
        {
            printf ( "OpenGL 3.3 not supported.\n" );
            
            return 1;
        }
     
                                    // register handlers
        glutDisplayFunc  ( display );
        glutReshapeFunc  ( reshape );
        glutKeyboardFunc ( key     );
        glutMouseFunc    ( mouse   );
        glutMotionFunc   ( motion  );
     
        if ( !GL_ARB_vertex_array_object )
            printf ( "No VAO support\n" );
     
        printf ( "GLSL Version: %s\n", Program::version().c_str () ); // вывод сыпется в консоль, хоть создано и граф. окно!
    ...
У меня опять, что-то не получается отобразить графику. Есть ли какая-нибудь книга по SDL и Visual C++ 2008?
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,1752 ]   [ 20 queries used ]   [ Generated: 21.01.19, 16:38 GMT ]