Вопрос

Я портировал программу 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 не привел к появлению какого-либо полезного ресурса.Любая подсказка или помощь?Спасибо!

Это было полезно?

Решение

Оказалось, что некоторые стандартные 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).Я не уверен, где именно произошел «перевод», но наша проблема решена!:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top