1

我正在将一个 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 上搜索并没有找到任何有用的资源。任何线索或帮助?谢谢!

4

1 回答 1

0

事实证明,某些标准的 OpenGL API 会被翻译成 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 for Solaris 应用程序插入时,这些函数调用将不会显示。

SUN 附带的 OpenGL 库 Solaris Sparc 包含 SUN 内部例程。但它们在 Solaris x86/x64(由 NVIDIA 提供)的 OpenGL 库中不存在。我不确定“翻译”到底发生在哪里,但我们的问题已解决!:)

于 2010-04-09T04:09:11.067 回答