MinGW и OpenGL: не проходит линковка
От: untied  
Дата: 02.10.03 11:47
Оценка:
Привет.

Недавно установил 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++' — ПК
Re: MinGW и OpenGL: не проходит линковка
От: Аноним  
Дата: 02.10.03 12:07
Оценка:
Не знаю, как там в плане скорости. Мне показалось, что VC НАМНОГО шустрее.
Re: MinGW и OpenGL: не проходит линковка
От: sercher Украина  
Дата: 02.10.03 12:24
Оценка:
Добавь: -lopengl32 -lglut32
Re[2]: MinGW и OpenGL: не проходит линковка
От: untied  
Дата: 02.10.03 12:29
Оценка:
Здравствуйте, sercher, Вы писали:


S>Добавь: -lopengl32 -lglut32


Блин, при чем тут глют, если не использую я его?
Хотя попробую, конечно.
Re: MinGW и OpenGL: не проходит линковка
От: untied  
Дата: 06.10.03 06:44
Оценка:
Привет.

Всем спасибо за внимание, разобрался сам! При сборке имена библиотек в MinGW нужно писать в конце, т.е.:

gcc -o glsample.exe glsample.o -mwindows -l opengl32

Для MinGW порядок подключения объектных файлов (в т.ч. библиотек) важен. Хоть и не понятно, почему так.

PS. И glut здесь совершенно, совершенно не при чем...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.