Подскажите пожалуйста, почему так
Потому что порядок перечисления библиотек важен: в списке библиотек
a b c
символы, которые нужны библиотеке
b
будут искаться только в библиотеке
c
, но не в
a
. Если между библиотеками нет циклических зависимостей (т.е. нет такого, что
a
определяет символ, нужный
b
, а
b
определяет символ, нужный
a
), то их можно упорядочить так, что линковка будет успешной (см.
топологическая сортировка). Если циклические зависимости есть, или сортировать лень, можно перечислить нужные библиотеки несколько раз или взять их в группу:
g++ main.cpp -Wl,--start-group -lglfw3 -lgdi32 -lopengl32 -lglew32s -Wl,--end-group