Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.142.146] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Я выполнила все условия из этого видео https://www.youtube.com/watch?v=QQzAHcojEKg по подключении библиотеки SDL однако при вызове некоторых методов выдаёт ошибку вот код:
Game.hpp #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 #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 // 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) |
Сообщ.
#2
,
|
|
|
Немножко в сторону, но пишут...:
bool init() { //Initialize all SDL subsystems if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) { return false; } Добавлено П.С. в самих *.h-файлах нет ничего про компоновку *.lib-файлов, а у вас проблему выдаёт компоновщик. Пропишите сами добавку SDL.lib где-то в настройках. |
Сообщ.
#3
,
|
|
|
Цитата И вообще, там SDL есть разных версий; было качественное изменение в LIB'ах с версии 1.xxx ко второй. Проверьте, какую используете. Я поставила, эту версию http://libsdl.org/download-2.0.php . У меня Visual C++ 2008 года. Эта версия SDL совместима с моей версией программы? |
Сообщ.
#4
,
|
|
|
Конечно. Библиотеки укажите в проекте (ну или строчку добавьте:
#pragma comment( lib, "SDL.lib" ) ) |
Сообщ.
#5
,
|
|
|
Всё равно не работает. Сейчас я пошагово опишу свои действия. Настройки и запуск первой программы.
Создаю новый проект Файл создать Visual c++ Консольное приложение CLR. Заменяю код // awdsdw.cpp: главный файл проекта. #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(L"Здравствуй, мир!"); return 0; } на #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 и копирую в папку с файлом проекта (для надёжности ещё в несколько папок включая главный проект). Да кстати в коде #pragma comment( lib, "SDL.lib") ошибка раз библиотека SDL2.lib, то и подключать надо SDL2.lib. Вот так: #pragma comment( lib, "SDL2.lib") Создаю тестовый код из видео урока. // 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) |
Сообщ.
#6
,
|
|
|
Эм-м-м... думаю все косяки начинаются от "консольности CLR".
Попробуйте для начала такие действия: 1. Создайте консольное для Win32 (потом можно будет поколдовать как переделать для универсума). 2. Уберите все вызовы SDL'а, кроме Init'а (с него бы начать, попробовать собрать). |
Сообщ.
#7
,
|
|
|
Другая теперь ошибка, создаю проект Win32 консольное приложение, даже подключила дополнительные библиотеки.
Цитата win32->Консольное приложение Win32 Далее->готово (всё оставила по умолчанию) // 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 произвела все настройки и добавила код в том месте где рекомендуют добавить код: ... // TODO: разместите код здесь. SDL_Init(SDL_INIT_EVERYTHING); MSG msg; HACCEL hAccelTable; ... Ошибка: Цитата error LNK2019: ссылка на неразрешенный внешний символ _SDL_Init в функции _wWinMain@16 |
Сообщ.
#8
,
|
|
|
Надо же SDL.H в двойных кавычках брать(в include), а не в угловых скобках.
П.С. не уверен, что это принципиально, впрочем. |
Сообщ.
#9
,
|
|
|
Вообще-то ошибка происходит на стадии линковки, так что SDL.H нормально подключился (во что бы он ни был заключён в #unclude).
А линковщик жалуется, что библиотека, в которой функции SDL находятся, к проекту не подключена. |
Сообщ.
#11
,
|
|
|
Кажется работает, пока сама не поняла. Видимо была не совместимость версии (нужна SDL-devel-1.2.14-VC8) вот откуда я брала пример Прикручиваем SDL к Visual Studio 2008. Вот ещё видео с youtube. vs2008-sdl-helloworld.
Теперь мне интересно как запустить так, чтобы отображался printf? Сборку я делала в ручную руководствуясь видео с youtube, т.е. я создала windows проект->пустой проект, а сам пример c ЖЖ. Там если перейти по первой ссылки то там вывод на экран происходит через printf. У меня не чего не выводится просто компилируется запускается экран мигает и всё, как вывести printf? |
Сообщ.
#12
,
|
|
|
Цитата Katerina1993 @ У меня не чего не выводится просто компилируется запускается экран мигает и всё, как вывести printf? Если запускается консоль и тут же пропадает. Тогда это просто окно консоли закрывается и ты не успеваешь увидеть надписи. Нужно либо запускать по Ctrl+F5(запуск без отладки). Либо запускать в консоли любой(cmd, far,...), либо добавить паузу/задержку перед выходом из программы. (Ну или как вариант бесконечный цикл выход которого нажатие любой клавиши например.). |
Сообщ.
#13
,
|
|
|
Цитата Katerina1993 @ У меня не чего не выводится просто компилируется запускается экран мигает и всё, как вывести printf? printf - это вывод в консольное окно. А библиотека мастерит графическое окошко. Поэтому никак. А для каких целей нужен printf ? |
Сообщ.
#14
,
|
|
|
Цитата ЫукпШ @ Натыкался как-то на элементарные примеры (SDL или нет - не помню) когда программа создаёт обычное граф. окно, а вывод продолжает вываливаться в оставшееся консольное. Может сударыне именно такое нужно?! Бывает такое, надо поискать. printf - это вывод в консольное окно. А библиотека мастерит графическое окошко. Поэтому никак. Добавлено Во, нашёл! Это в glut'е было: 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 () ); // вывод сыпется в консоль, хоть создано и граф. окно! ... |
Сообщ.
#15
,
|
|
|
У меня опять, что-то не получается отобразить графику. Есть ли какая-нибудь книга по SDL и Visual C++ 2008?
|