Привет.
Недавно установил MinGW (хотел сравнить в плане скорости с другими компиляторами) и не могу собрать программу.
Компилирую так:
gcc -c -o glsample.o glsample.c
Все замечательно компилируется, создается файл glsample.o
А вот при линковке происходит странное: линкер не находит нужных имен в библиотеке.
gcc -l opengl32 -o glsample.exe glsample.o
Выдается куча ошибок, типа не найдена ссылка на функцию glPolygonMode@8, glEnd@0 и т.д. (причем эти имена выдаются именно без первого символа подчеркивания -- "_").
Библиотеку линкер находит (если задать -l opengl66, то ошибка будет всего одна: не найдена такая библиотека. Функции OpenGL описаны в gl.h с директивой __stdcall, это понятно. Но почему он при сборке ищет glEnd@0, а не _glEnd@0, вот что я не могу понять?!
Если посмотреть файл glsample.o, то ссылки на внешние функции там прописаны именно с первым символом "_", например _glEnd@0. И если посмотреть файл libopengl32.a, то и там имена функций начинаются с этого символа подчеркивания. Но почему-то при сборке линкер читает файл glsample.o, отбрасывает у имен функций первый символ, а потом в библиотеке не может найти нужную функцию.
В общем, не понимаю я: линкер не в состоянии собрать программу со своей же собственной библиотекой!
Я пробовал передавать разные опции линкеру (--disable-stdcall-fixup, --enable-stdcall-fixup и др.) -- не помогает.
Что делать?
02.10.03 16:58: Перенесено модератором из 'C/C++' — ПК
Не знаю, как там в плане скорости. Мне показалось, что VC НАМНОГО шустрее.
Привет.
Всем спасибо за внимание, разобрался сам! При сборке имена библиотек в MinGW нужно писать в конце, т.е.:
gcc -o glsample.exe glsample.o -mwindows -l opengl32
Для MinGW порядок подключения объектных файлов (в т.ч. библиотек) важен. Хоть и не понятно, почему так.
PS. И glut здесь совершенно, совершенно не при чем...