Помимо проблемы запуска с отсутствующей библиотекой Dynami c, вы, похоже, вводите в заблуждение (возможно, из-за того, что SDL фактически вводит в заблуждение в этом аспекте), что ваш b main
в gdb устанавливает точку останова в вашем main
функция. Это не так, поскольку SDL переопределяет main
на SDL_main
, поэтому, если у вас есть #include "SDL2.h"
или что-то подобное, и в SDL есть основная оболочка, реализованная для вашей операционной системы - ваша функция будет переименована. Внутренне main
(или wmain
, или WinMain
, или любая другая целевая система, использующая в качестве точки входа определяемого пользователем кода) реализовано в библиотеке SDL2main
, с которой вы связываетесь, и вызывает SDL_main
(ваш код) .
TL; DR используйте вместо него b SDL_main
в gdb.
Второй момент - почему вы не видите выходной текст. Это еще раз windows указывает c, в основном потому, что вы создали приложение «GUI», которое отличается от «консольного» приложения, и на самом деле его stdout
не связано с выводом на консоль. Вывод все еще есть, но вы его не видите, но его можно перенаправить в другую программу или файл, например, your_program.exe | more
или your_program.exe > stdout.txt
. Есть способы повторно подключить stdout к консоли (некоторые freopen
с CON
magi c, насколько я помню), или вы можете просто создать консольную программу вместо -Wl,-subsystem,console
.
В качестве примечания , -w
флаг компилятора (который можно примерно прочитать как «никогда не предупреждайте меня о каких-либо потенциальных проблемах с моим кодом, поскольку я на 100% уверен, что он абсолютно идеален, и все ваши предупреждения являются необоснованными жалобами на мой идеальный код» (извините)) - действительно плохая идея, за очень редкими исключениями. Компиляторы, особенно g cc и clang, очень хороши в выдаче предупреждений в тех местах, где это действительно важно, что позволяет вам рано обнаруживать ошибки. Вам нужно больше предупреждений (например, -Wall -Wextra
, возможно, больше), а не вообще никаких предупреждений. И пока мы это делаем, OBJS
в make-файле логически должно означать объектные файлы, а не источники (конечно, технически вы можете называть свои переменные как угодно, это просто вводит в заблуждение).