Щоб зрозуміти чому у тебе не виходить, тобі потрібно зрозуміти що таке лінковка. Для цього треба зрозуміти що робить g ++ (так само як і інші плюсові компілятори)
Поведінка за замовчуванням (без спеціальних прапорів / опцій).
Замовчуванням g ++ виконує більше ніж просто компіляція, він ще самостійно викликає лінковщік для результату компіляції (файлу з розширенням * .o або * .obj). Такий файл (* .o) може і не скластися, різні версії компілятора можуть відразу викликати лінковщік.
Чим погано поведінка за умовчанням.
Неможливо створити екзешник складається більш ніж з одного * .cpp файлу. Тобто, якщо в проекті два або більше * .cpp файлів, то необхідно змінити поведінку компілятора за допомогою спеціальних опцій, що забороняють викликати лінковщік автоматично.
Як створювати файлів з багатьох * .cpp файлів
1. Скомпілювати кожен * .cpp файл окремо з опцією позначає, що на виході повинен вийти * .o файл.
2. Слінковать * .o файли разом в один екзешник.
У твоєму випадку необхідно виконати щось на зразок цього:
g ++ -c -o main.o main.cpp
g ++ -c -o renderSystem.o renderSystem.cpp
g ++ -o game.exe main.o renderSystem.o
Я не користувався g ++ на винде, так що не можу гарантувати, що цей приклад буде працювати. Але загальний принцип сподіваюся зрозумілий.
Так що ж таке лінковка?
Так то для багатофайлових проектів прийнято використовувати спеціальні скрипти для побудови, так звані мейкфайли (makefile). В такому файлі описується в якому порядку і з якими опціями необхідно компілювати файли, а так само як їх лінковані.
Якщо мені не зраджує пам'ять, віжуал студія створює такий файл автоматично, він на жаль не сумісний з g ++.
Більш того, в світі безліч різних варіацій і стандартів мейкфайла, практично кожен перший розробник IDE "винаходить" свій варіант мейкфайла несумісний з іншими.
Додатки, які виконують ці мейкфайли називаються білдовой системою. У Лінукс самим поширеними є мабуть make і cmake. Крім них ще дуже багато білдових систем: scons, autotools, gradle, waf. тисячі їх.
Білдовая система прочитує мейкфайли в проекті і викликає інструменти (g ++, лінковщік, або які спеціальні програми конкретно для цього проекту) у відповідності з інструкціями з скрипта.