неопределенная ссылка на WinMain @ 16 C ++, SDL-2

Я получаю ошибкуundefined reference to [email protected], Чтобы сэкономить место,вот ссылка на все файлы в данный момент в проекте, В настоящее время, это не должно делать ничего, кроме как создать окно, залить его зеленым, а затем нарисовать прямоугольник в углу, отслеживая положение моей мыши через консоль. Тем не менее, он не будет построен, и я получил вышеупомянутую ошибку.

Мои библиотеки компоновщика:

glew32slibSDL2mainmingw32libSDL2OpenGL32glew32

Я использую Codeblocks 13.12 с g ++ в соответствии со стандартом языка C ++ 11 ISO C ++. Мой компьютер использует Windows 10 на случай, если это актуально.

Я потратил довольно много времени, пытаясь найти решение, и кажется, что у всех есть совершенно другое решение, и до сих пор ни один из них не работал для меня. Вот несколько примеров:

Добавление SDL2_image в мои библиотеки ссылок в соответствии сэтот похожий вопрос, Это дало мне ошибку-lSDL2_image.Начать проект с нуля на случай, если какой-то опечатки я не заметил. (Я получил точно такую ​​же ошибку).Меняя мойmain функция кWinMain, Я получил то же сообщение об ошибке.ДобавлениеWindows.h заголовок. Это не сделало ничего заметного.Различные предполагаемые "правильные заказы" для моих библиотек. Пока что ни один из них не помог.

Также должен отметить, что ответ предоставлен пользователем, Cheers и hth. - Альф,Вот возможно, это то, что я ищу, но, честно говоря, я не могу полностью понять, что я должен делать, основываясь на этом.

Если есть какая-либо соответствующая информация, которую я забыл включить, пожалуйста, сообщите мне, и я сделаю это как можно скорее. Заранее спасибо.

 Poriferous02 сент. 2015 г., 01:58
Пытаться#undef main в начале main.cpp
 πάντα ῥεῖ02 сент. 2015 г., 01:32
Возможный дубликатstackoverflow.com/questions/12573816/...

Ответы на вопрос(1)

Решение Вопроса

Я думаю ты хочешь

#define SDL_MAIN_HANDLED

в вашем основном файле, ДО строки

#include <SDL2/SDL.h>

Объяснение:

В SDL / SDL2, чтобы попытаться упростить кроссплатформенную разработку определенных видов приложений, SDL создает собственную «точку входа» для вашего приложения. То есть твойint main() это нереальный главный. Что происходит,main определяется как макрос в заголовке SDL, и это приводит к тому, что ваш main будет переименован вSDL_main или похожие. Затем в библиотеке "SDL_main" другойmain определяется, который будет настоящимmain вашего приложения. этоmain просто выбирает аргументы командной строки любым подходящим для платформы способом и вызывает вашmain (который был переименованSDL_main).

В Windows также есть некоторые различия относительно того, запускается ли ваше приложение как консольная программа и как программа с графическим интерфейсом, iiuc.

Иногда вы хотите, чтобы SDL делал это за вас, но если вы разрабатываете традиционную консольную программу, обычно это не так. Таким образом, вы проходите этот SDLSDL_MAIN_HANDLED определить, чтобы не делать все это.

#undef main подход также будет работать, но он не так хорош, потому что таким образом вы сообщаете SDL о том, что происходит, с помощью другого метода SDL думает, что все его вещи будут использоваться, и фактически вы грубо отключаете его#undef потом.

Если вы хотите увидеть детали различных проверок макросов / платформ, вы можете посмотреть вSDL_main.h заголовок. Если вы хотите узнать, каковы преимущества основной системы SDL, вы можете посмотреть документацию по SDL.

 The Orca02 сент. 2015 г., 08:30
Это избавило от ошибки. Благодарю. Если вы не возражаете, я спрашиваю, почему / как это решает проблему?

Ваш ответ на вопрос