Форум программистов, компьютерный форум CyberForum.ru

Прилинковать SDL к V.S. 2010 - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 90, средняя оценка - 4.91
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
30.07.2013, 22:30     Прилинковать SDL к V.S. 2010 #1
Доброго всем вечера.
Я знаю, что подобных тем было много, но, справиться с проблемой не могу.
Скачал с оф.сайта все .h, SDL.lib, SDLmain.lib и SDL.dll.
dll поместил в System32, либы и .h собрал в папку.
В свойствах проекта указал к папке путь и выбрал Многопоточный Dll (\WD)
В компоновщике указал обе библиотеки и выбрал \SUBSYSTEM:WINDOWS.

При компиляции простенького проекта:
LINK : fatal error LNK1104: не удается открыть файл "SDL.lib"

Если поместить все файлы в папку проекта и поменять путь в настройках:
MSVCRT.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup
D:\visual studio 2010\Projects\SDL\Урок 1\Debug\Урок 1.exe : fatal error LNK1120: 1 неразрешенных внешних элементов

Вот код:
App.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "App.h"
 
App::App() {}
 
int App::Execute() {
    return 0;
}
 
int main(int argc, char* argv[]) {
    App App;
 
    return App.Execute();
}
App.h
C++
1
2
3
4
5
6
7
8
9
10
11
#ifndef _APP_H_
#define _APP_H_
 
#include <SDL.h>
 
class App {
    public:
        App();
        int Execute();
};
#endif
Буду рад любой помощи
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 22:30     Прилинковать SDL к V.S. 2010
Посмотрите здесь:

C++ Странность С++ и SDL
C++ инициализация SDL
Как вывести текст на экран, используя библиотеку SDL TTF для SDL 2? C++
C++ Установка SDL 2
C++ SDL C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2013, 23:25     Прилинковать SDL к V.S. 2010 #2
Цитата Сообщение от Ryabchik Посмотреть сообщение
выбрал \SUBSYSTEM:WINDOWS.
Нужно или консоль выбирать, или проект другой создавать.
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
30.07.2013, 23:36  [ТС]     Прилинковать SDL к V.S. 2010 #3
Цитата Сообщение от alsav22 Посмотреть сообщение
проект другой создавать.
Какой другой?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2013, 23:42     Прилинковать SDL к V.S. 2010 #4
Win32.
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
30.07.2013, 23:50  [ТС]     Прилинковать SDL к V.S. 2010 #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Win32.
Я, собственно, его и создаю

Добавлено через 36 секунд
Выбор консоли ничего не меняет
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
31.07.2013, 00:00     Прилинковать SDL к V.S. 2010 #6
Попробуй ключи
-lSDLmain
-lSDL
-lkernel32
Если не поможет, то кури http://lazyfoo.net/SDL_tutorials/les...dows/index.php
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.07.2013, 05:10     Прилинковать SDL к V.S. 2010 #7
Танцы с бубном. Работы, правда, не увидел, но компилируется без ошибок. Попробуйте библиотеку msvcrt.lib прописать в игнорируемые. Одну её. В свойствах проекта есть пункт, где можно прописать игнорирование всех стандартных библиотек, а в другом пункте можно прописать какие. Вот там, где какие.
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
31.07.2013, 16:17  [ТС]     Прилинковать SDL к V.S. 2010 #8
Прогресс маленький, но есть.
Теперь он находит либы и .h, а ошибка одна:
MSVCRT.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup
D:\visual studio 2010\Projects\SDL\Урок 1\Debug\Урок 1.exe : fatal error LNK1120: 1 неразрешенных внешних элементов

alsav22,
Если я добавлю игнорирование msvcrt.lib, ошибок 5:
App.obj : error LNK2001: неразрешенный внешний символ "__RTC_Shutdown"
App.obj : error LNK2001: неразрешенный внешний символ "__RTC_InitBase"
App.obj : error LNK2019: ссылка на неразрешенный внешний символ __RTC_CheckEsp в функции _SDL_main
App.obj : error LNK2019: ссылка на неразрешенный внешний символ @_RTC_CheckStackVars@8 в функции _SDL_main
LINK : error LNK2001: неразрешенный внешний символ "_WinMainCRTStartup"
D:\visual studio 2010\Projects\SDL\Урок 1\Debug\Урок 1.exe : fatal error LNK1120: 5 неразрешенных внешних элементов

coloc,
Цитата Сообщение от coloc Посмотреть сообщение
Попробуй ключи
-lSDLmain
-lSDL
-lkernel32
Простите мою безграмотность, но как и куда их попробовать?

Цитата Сообщение от coloc Посмотреть сообщение
Если не поможет, то кури http://lazyfoo.net/SDL_tutorials/les...dows/index.php
Все сделал, как там

Добавлено через 5 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
компилируется без ошибок.
Сижу и завидую)

Добавлено через 2 часа 2 минуты
Оочень актуально
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
31.07.2013, 16:59     Прилинковать SDL к V.S. 2010 #9
Попробуй вместо int main
C++
1
2
3
 #include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
31.07.2013, 17:27  [ТС]     Прилинковать SDL к V.S. 2010 #10
coloc, заработало! Спасибо вам огромное!
Поясните, почему так? Каким местом SDL затрагивает WinAPI? Или это из-за выбора \SUBSYSTEM:WINDOWS?
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
31.07.2013, 17:54     Прилинковать SDL к V.S. 2010 #11
Ryabchik, у тебя какая версия сдл?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.07.2013, 17:59     Прилинковать SDL к V.S. 2010 #12
Цитата Сообщение от Ryabchik Посмотреть сообщение
Или это из-за выбора \SUBSYSTEM:WINDOWS?
Может и из-за этого (я же не зря написал: "танцы с бубном"), хотя у меня компилировалось при выборе и консоли, и windows.

Не по теме:

Я только не понял, как это всё работать должно? В каком проекте? Код компилируется, но работы я не увидел.

coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
31.07.2013, 18:03     Прилинковать SDL к V.S. 2010 #13
alsav22, в смысле работы не увидел? Там и не должна выполнятся работа. Там даже нет инициализации СДЛ. Просто класс-заготовка.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.07.2013, 18:10     Прилинковать SDL к V.S. 2010 #14
Я не код ТС пробовал, а такой, например:
C++
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
#include "SDL.h"
#include <cstdlib>
#include <iostream>
#include <Windows.h>
//using namespace std;
 
//int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
int main(int argc, char *argv[])
{
    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );
    
    SDL_Event event;
 
    SDL_WaitEvent(&event);
 
    switch (event.type) 
    {
        case SDL_KEYDOWN:
            printf("The %s key was pressed!\n",
                   SDL_GetKeyName(event.key.keysym.sym));
            break;
        case SDL_QUIT:
            exit(0);
    }
    
    //Quit SDL
    SDL_Quit();
    //system("pause");
    return 0;
}
Насколько я понял, должно обрабатываться нажатие клавиши. Консоль запускается, но на нажатие не реагирует.
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
31.07.2013, 18:25  [ТС]     Прилинковать SDL к V.S. 2010 #15
coloc, SDL-1.2.15

Добавлено через 11 минут
Кхм. Если усложнить проект, появляются ошибки по поводу ссылок на неразрешенные внешние элементы.

App.obj : error LNK2019: ссылка на неразрешенный внешний символ _SDL_SetVideoMode в функции "public: bool __thiscall App::Init(void)" (?Init@App@@QAE_NXZ)
App.obj : error LNK2019: ссылка на неразрешенный внешний символ _SDL_Init в функции "public: bool __thiscall App::Init(void)" (?Init@App@@QAE_NXZ)
App.obj : error LNK2019: ссылка на неразрешенный внешний символ _SDL_PollEvent в функции "public: int __thiscall App::Execute(void)" (?Execute@App@@QAEHXZ)
App.obj : error LNK2019: ссылка на неразрешенный внешний символ _SDL_Quit в функции "public: void __thiscall App::Cleanup(void)" (?Cleanup@App@@QAEXXZ)

Добавлено через 31 секунду
alsav22, у вас работает в Студии?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.07.2013, 18:37     Прилинковать SDL к V.S. 2010 #16
Цитата Сообщение от Ryabchik Посмотреть сообщение
у вас работает в Студии?
Работает что?

Добавлено через 3 минуты
Ryabchik, там ещё либы под разные платформы, учитывайте это.

Добавлено через 2 минуты
Цитата Сообщение от Ryabchik Посмотреть сообщение
SDL-1.2.15
почему не поновее?
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
31.07.2013, 19:45     Прилинковать SDL к V.S. 2010 #17
Цитата Сообщение от alsav22 Посмотреть сообщение
почему не поновее?
Сейчас все статьи именно по этой версии, для версии поновее надо доку читать. Для начала пойдет.
Цитата Сообщение от alsav22 Посмотреть сообщение
но на нажатие не реагирует.
СДЛ переводит вывод в файл stdout

Добавлено через 5 минут
alsav22, вот такой вариант у меня работает
C++
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 <SDL\SDL.h>
#include <cstdlib>
#include <iostream>
#include <Windows.h>
//using namespace std;
 
//int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
int main(int argc, char *argv[])
{
    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );
    
    SDL_Event event;
    SDL_Surface *screen = NULL;
    
    if((screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF))==NULL){
        return 1;
    }
    
    bool running = true;
    
    while( running ) {
        while( SDL_PollEvent( &event ) ) {
            switch (event.type) 
            {
                case SDL_KEYDOWN:
                    printf("The %s key was pressed!\n",
                    SDL_GetKeyName(event.key.keysym.sym));
                break;
            
                case SDL_QUIT:
                    running = false;
            }
        }
        SDL_Flip( screen );
    }
    
    //Quit SDL
    SDL_Quit();
    //system("pause");
    return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.07.2013, 20:42     Прилинковать SDL к V.S. 2010 #18
Это у меня просто не компилируется. Не находит:
SDL_SetVideoMode
SDL_HWSURFACE
SDL_DOUBLEBUF
SDL_Flip
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
31.07.2013, 21:04  [ТС]     Прилинковать SDL к V.S. 2010 #19
alsav22, у меня то же самое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 21:06     Прилинковать SDL к V.S. 2010
Еще ссылки по теме:

SDL mouse C++
Оптимизация SDL C++
SDL 2. Как правильно прилинковать/подключить к Visual Studio? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.07.2013, 21:06     Прилинковать SDL к V.S. 2010 #20
А из 14 поста компилируется?
Yandex
Объявления
31.07.2013, 21:06     Прилинковать SDL к V.S. 2010
Ответ Создать тему
Опции темы

Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru