Как правильно подключить библиотеку SDL
Здравствуйте, подскажите, пожалуйста, как правильно подключить библиотеку SDL.
Я пользуюсь компилятором Code::Blocks.
При подключении SDL появляется ошибка:
undefined reference to `WinMain@16′
Скажите, пожалуйста, как это исправить.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
SDL 2. Как правильно прилинковать/подключить к Visual Studio?
Я пересмотрел много материалов по этой теме, но никакие из них мне не помогли. 1. Подключил.
Как вывести текст на экран, используя библиотеку SDL TTF для SDL 2?
В официальной доке как-то скомкано написано. При инициализации SDL TTF и при загрузке шрифта.
Как правильно подключить данную библиотеку ?
Доброго времени суток подскажите пожалуйста как правильно подключить данную библиотеку в.
Как правильно подключить свою библиотеку?
Здравствуйте всем. Я использую Visual Studio. В одном решении у меня находится проект библиотеки.
Заблокирован
Ну так ты наверное пытаешься подключить библиотеки к консольному проекту, а нужно к проекту Win32
5496 / 4891 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
Сообщение от albert!
Скажите, пожалуйста, как это исправить.
Точку входа вот такую сделайте:
int main(int argc, char *argv[]) .
Регистрация: 23.01.2013
Сообщений: 45
-NEURON-,Я уже не помню, к какому подключаю, а всё заново переписывать не хочется. Если проект консольный, то к нему же, наверное, тоже можно подключить SDL. Не подскажете как?(GLUT работает без проблем)
_________
Alsav, функция main выглядит именно так.
5496 / 4891 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
Сообщение от albert!
функция main выглядит именно так.
Код давайте.
Регистрация: 23.01.2013
Сообщений: 45
Сообщение от alsav22
Код давайте.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#include #include #include #include #include #include #include #include #include #include #include using namespace std; . int main(int argc,char* argv[]) { glutInit(&argc,argv); glutInitWindowSize(WinWid,WinHei); glutInitDisplayMode(GLUT_DOUBLE SetButtonInfo(); glMatrixMode(GL_PROJECTION); gluOrtho2D (0.0,WinWid, 0.0,WinHei); glShadeModel(GL_FLAT); glutReshapeFunc(Reshape); glutDisplayFunc(Display); glutMouseFunc(Mouse); glutKeyboardFunc(Keyboard); glutTimerFunc(50,Timer,0); glutMainLoop(); return 0; }
Более подробный код давать?
Заблокирован
OpenGL сделан не для консольных проектов. Попробуй заменить свой код на этот:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; . int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); glutInit(&argc, argv); glutInitWindowSize(WinWid, WinHei); glutInitDisplayMode(GLUT_DOUBLE SetButtonInfo(); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, WinWid, 0.0, WinHei); glShadeModel(GL_FLAT); glutReshapeFunc(Reshape); glutDisplayFunc(Display); glutMouseFunc(Mouse); glutKeyboardFunc(Keyboard); glutTimerFunc(50, Timer, 0); glutMainLoop(); return 0; }
Регистрация: 23.01.2013
Сообщений: 45
Сообщение от -NEURON-
OpenGL сделан не для консольных проектов. Попробуй заменить свой код на этот:
Теперь вот какая ошибка
1 2 3 4 5 6 7 8 9 10 11 12
Stockpiles\main.cpp|220|warning: `__stdcall__' attribute only applies to function types| Stockpiles\main.cpp|220|error: `int WinMain' redeclared as different kind of symbol| E:\Dev-Cpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\winbase.h|1040|error: previous declaration of `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)'| Stockpiles\main.cpp|220|error: declaration of `int WinMain'| E:\Dev-Cpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\winbase.h|1040|error: conflicts with previous declaration `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)'| Stockpiles\main.cpp|220|error: `_In_' was not declared in this scope| Stockpiles\main.cpp|220|error: `_In_opt_' was not declared in this scope| Stockpiles\main.cpp|220|error: `_In_' was not declared in this scope| Stockpiles\main.cpp|220|error: `_In_' was not declared in this scope| Stockpiles\main.cpp|221|error: initializer expression list treated as compound expression| Stockpiles\main.cpp|221|error: expected `,' or `;' before '{' token| ||=== Build finished: 10 errors, 1 warnings ===|
Установка SDL
Оригинал: Lazy Foo SDL Tutorial Представляю мой пробный перевод первой части руководства по SDL от Lazy Foo. Так как перевод пробный, я для начала переведу только ту часть руководства, которую я непосредственно проходил и соответственно тестировал. Это относится к тем частям, которые зависят от операционной системы и используемого ПО. В частности в этой статье я переведу установку SDL только под Linux, а сборку приложения только из командной строки. Так как SDL это сторонняя библиотека, вам придется устанавливать ее самостоятельно. Здесь я приведу пошаговое руководство по её установке. Если у вас возникли какие то проблемы, попробуйте почитать FAQ по разработке на SDL. Как только вы установите SDL, вы можете переходить ко второй половине руководства и научитесь загружать и отображать изображения на экране.
Так как существует огромное количество дистрибутивов, это руководство, возможно, не сработает на вашем дистрибутиве. Попробуйте почитать SDL Linux FAQ. Если вы все перепробовали и все еще ничего не работает, свяжитесь со мной и я попробую добавить инструкции по конкретному дистрибутиву.
Для дистрибутивов использующих APT (Debian, Ubuntu, Mint, etc) введите в терминале эти команды:
$ sudo aptitude install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev
Или если aptitude не установлен:
$ sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev
Для дистрибутивов использующих yum(Yellow dog Updater) используйте следующее:
$ yum install SDL-devel SDL_mixer-devel SDL_image-devel SDL_ttf-devel
Так же как для aptitude или apt-get для установки вам нужны административные привилегии. (Запуск через sudo или от имени root’а) Для дистрибутивов основанных на RPM вы найдете эти пакеты на сайте SDL, в особенности на этой странице. Теперь, когда вы установили SDL, самое время открыть вашу любимую IDE или текстовый редактор.
Создайте текстовый файл(тоесть исходник) со следущим содержимым:
#include int main( int argc, char* args[] ) < //Инициализировать SDL SDL_Init( SDL_INIT_EVERYTHING ); //Освободить ресурсы занятые SDL SDL_Quit(); return 0; >
Теперь введите в командной строке:
g++ -o myprogram mysource.cpp -lSDL
Как вывести текст на экран, используя библиотеку SDL TTF для SDL 2?
Аналоговые часы используя библиотеку SDL.
Здравствуйте, нужно написать программу которая будет показывать правильное время на аналоговых.
Как правильно подключить библиотеку SDL
Здравствуйте, подскажите, пожалуйста, как правильно подключить библиотеку SDL. Я пользуюсь.
Как внедрить графическую библиотеку SDL в Visual Studio 2012
Никогда не внедрял сторонних библиотек в Visual Studio. В инете поискал, но так ничего и не понял.
SDL: куда поместить библиотеку
Можете объяснить как установить sdl и кинуть (желательно на русском) туториалы для sdl на free.
Шрифты True Type
Пришло время научится рендерить текст. SDL не поддерживает *.ttf нативно, так что нам понадобится расширение SDL_ttf . Оно позволяет создавать поверхности из шрифтов True Type.Вы можете скачать SDL_ttf здесь. Для установки расширения, вы можете воспользоваться моей инструкцией. Установка SDL_ttf выполняется очень похоже на установку SDL_image . Пользователем *nix систем возможно придется линковать приложение с freetype. Этот туториал раскрывает основы использования SDL_ttf .
//Поверхности SDL_Surface *background = NULL; SDL_Surface *message = NULL; SDL_Surface *screen = NULL; //Структура события SDL_Event event; //Шрифт, который мы будем использовать TTF_Font *font = NULL; //Цвет шрифта SDL_Color textColor = < 255, 255, 255 >;
Объявляем переменные. Тут у нас поверхности фона и экрана, а так же структура событий, как и раньше. Так же у нас есть поверхность message , которая будет содержать поверхность с текстом. Новый тип данных TTF_Font определяет шрифт, который мы будем использовать. Плюс структура SDL_Color определяющая цвет текста для рендеринга. В нашем случае цвет — белый. Если вы хотите больше узнать про тип данных SDL_Color , можете посмотреть о нем в документации SDL .
bool init() < //Инициализировать все подсистемы SDL if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) < return false; >//Подготовить экран screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE ); //Если при подготовке экрана произошла ошибка if( screen == NULL ) < return false; >//Инициализировать SDL_ttf if( TTF_Init() == -1 ) < return false; >//Установить заголовок окна SDL_WM_SetCaption( "TTF Test", NULL ); //Если все прошло хорошо return true; >
Это наша функция инициализации. Все тоже самое что и раньше, только в этот раз мы дополнительно инициализируем SDL_ttf«SDL_ttf инициализируется вызовом TTF_Init() . TTF_Init() возвращает -1 в случае ошибки. TTF_Init() должна быть вызвана до использованию любой другой функции SDL_ttf .
bool load_files() < //Загрузить фоновое изображение background = load_image( "background.png" ); //Открыть шрифт font = TTF_OpenFont( "lazy.ttf", 28 ); //В случае проблем с загрузкой фона if( background == NULL ) < return false; >//При ошибке загрузки шрифта if( font == NULL ) < return false; >//Если все загрузилось return true; >
Это наша функция загрузки файлов. Для загрузки *.ttf шрифта нужно вызвать TTF_OpenFont() . Первый аргумент TTF_OpenFont() это имя *.ttf файла, который вы хотите открыть. Второй аргумент — размер который вы хотите установить открываемому шрифту. В случае ошибки при загрузки шрифта, TTF_OpenFont() вернет NULL .
//Отрендерить текст message = TTF_RenderText_Solid( font, "The quick brown fox jumps over the lazy dog", textColor ); //При ошибке рендера if( message == NULL ) < return 1; >//Скопировать изображения на экран apply_surface( 0, 0, background, screen ); apply_surface( 0, 150, message, screen ); //Обновить экран if( SDL_Flip( screen ) == -1 )
Это код рендеринга внутри функции main() . Быстрейший путь отрендерить текст это использовать функцию TTF_RenderText_Solid() . TTF_RenderText_Solid() принимает шрифт в качестве первого аргумента и создает поверхность с текстом из второго аргумента и цветом из третьего. TTF_RenderText_Solid() возвращает NULL в случае ошибки. Существуют и другие способы рендеринга текста, проверьте их в документации SDL_ttf . Для некоторых пользователей Линукса TTF_RenderText_Solid() не сработает. В этом случае убедитесь что у вас используется последняя версия библиотеки freetype (библиотека на которой основана SDL_ttf ) и сама SDL_ttf . Если это не помогло, попробуйте использовать TTF_RenderText_Shaded() вместо TTF_RenderText_Solid() .
void clean_up() < //Освободить поверхности SDL_FreeSurface( background ); SDL_FreeSurface( message ); //Закрыть использованный шрифт TTF_CloseFont( font ); //Завершить SDL_ttf TTF_Quit(); //Завершить SDL SDL_Quit(); >