Задать вопрос
@sddvxd

Почему тут undefined reference?

Здравствуйте!
Пытаюсь скомпилировать исходный файл, линковщик запинается на этой строке:

#define GLEW_STATIC
#include <GL/glew.h>
#include <GL/glext.h>
#include <GLFW/glfw3.h>
...
glGenBuffers(0, 0);


C:/Qt/Tools/mingw530_32/bin/../lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w
64-mingw32/lib/../lib/glew32s.lib(tmp/glew_static/Release/Win32/glew.obj):(.text
$mn+0x7): undefined reference to `_imp__wglGetProcAddress@4'


Собираю такой командой: g++ main.cpp -lglfw3 -lgdi32 -lopengl32 -lglew32s

все библиотеки находит, а эта функция (wglGetProcAddress) определена в libopengl32.a, но линковщик не может ее найти. Подскажите пожалуйста, почему так
  • Вопрос задан
  • 241 просмотр
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Подскажите пожалуйста, почему так

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

Войдите, чтобы написать ответ

Похожие вопросы