Неопределенный символ sunOglCurPrimTablePtr в Solaris-x86

Я переносил программу на C++ из Solaris Sparc в Solaris x86. Программа использует библиотеку OpenGL, а компиляция выполняется в Рабочая станция Sun Ultra27 с установленным по умолчанию GCC (3.4.3) и библиотекой OpenGL поставляется вместе с машиной.

Однако при связывании не удалось найти следующий вызов OpenGL:

Undefined symbol                    first referenced in file
sunOglCurPrimTablePtr               ../../lib/libgltt.so
sunOglCurrentContext                ../../lib/libgltt.so

который, как sunOglCurPrimTablePtr, так и sunOglCurrentContext, должен быть доступен в библиотеке OpenGL по умолчанию /usr/lib/libGL.so (ссылки на /usr/X11/lib/NVIDIA/libGL.so.1). Но я ничего не нашел в нем:

> nm /usr/lib/libGL.so
/usr/lib/libGL.so:

Поиск в Интернете, SUN или Nvidia не привел ни к одному полезному ресурсу. Любая подсказка или помощь? Спасибо!


person yowkee    schedule 31.03.2010    source источник


Ответы (1)


Оказалось, что некоторые стандартные API OpenGL будут транслироваться во внутренние функции SUN. Установив флаг компиляции SUN_OGL_NO_VERTEX_MACRO, программа больше не будет ссылаться на символ sunOgl*, и проблема будет решена.

Информация находится по адресу http://java423.vicp.net:8652/infoserver.central/data/syshbk/collections/TECHNICALINSTRUCTION/1-61-210284-1.html, пункт 9:

Без флага компиляции SUN_OGL_NO_VERTEX_MACRO все вызовы glVertex*(), glNormal*(), glColor*(), glIndex*() и glTexCoord*() будут преобразованы во внутренние подпрограммы с повышенной производительностью. Эти вызовы функций НЕ будут отображаться при использовании dbx() или при выполнении связанного с SLI вставки OpenGL для приложений Solaris.

Библиотеки OpenGL, поставляемые с SUN Solaris Sparc, содержат внутренние процедуры SUN. Но их нет в библиотеке OpenGL для Solaris x86/x64 (предоставляется NVIDIA). Я не уверен, где именно произошел "перевод", но наша проблема решена! :)

person yowkee    schedule 09.04.2010