【问题标题】:linking openGL on BSD在 BSD 上链接 openGL
【发布时间】:2017-11-02 22:32:32
【问题描述】:

我对使用 openGL 的程序有一点奇怪的问题

如果我尝试使用链接选项在带有 nvidia 图形的 FreeBSD 机器上编译 -pthread -lm -lX11 -lGL -lGLU

我得到错误:

//usr/local/lib/libGL.so: undefined reference to `_nv021glcore'
//usr/local/lib/libGL.so: undefined reference to `_nv013glcore

Open GL 演示和一切都在同一台机器上运行良好。如果我尝试在另一台具有相同版本的 FreeBSD 但不存在 nvidia 板的机器上编译相同的程序,它会编译,但如果我尝试在具有 nvidia 图形的机器上运行二进制文件,程序会失败并显示

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  153 (GLX)
Minor opcode of failed request:  3 (X_GLXCreateContext)
Value in failed request:  0x0
Serial number of failed request:  22
Current serial number in output stream:  2

OpenGL 二进制演示和东西在同一台 BSD 机器上运行良好,所以 GL 设置似乎没有问题,导致它在 linux 上编译和运行的同一程序,我不知道是什么造成这种情况。

编辑

这些 nvxxxcore 函数中的大多数似乎都是从 libnvidia-glcore.so.1 导出的 nm -D 给出出口:

00000000010abaa0 T _nv000glcore
00000000010aba90 T _nv001glcore
00000000010abac0 T _nv002glcore
00000000011322e0 T _nv003glcore
00000000010abae0 T _nv014glcore
00000000010d0200 T _nv015glcorea-tls.so which ma
00000000010bc9e0 T _nv016glcore
0000000001c27340 B _nv017glcore
0000000001578ac0 R _nv018glcore
0000000001584480 R _nv019glcore
0000000001c292c0 B _nv020glcore
0000000001c22080 B _nv022glcore
0000000000add970 T _nv023glcore
0000000001c27860 B _nv024glcore
0000000001c292a8 B _nv027glcore
0000000001c2a2a0 B _nv028glcore
0000000001c27178 B _nv029glcore
0000000001bf0248 D _nv035glcore
000000000119ba60 T _nv042glcore

其中不包括这些缺失的链接,但这仍然让我不知道如何解决这个问题。

编辑

有问题的出口位于libnvidia-tls.so,这让这一切变得陌生,因为应该可以找到它

readelf -d /usr/local/lib/libGL.so

Dynamic section at offset 0xf0e08 contains 26 entries:
Tag                Type                  Name/Value
0x0000000000000001 NEEDED               Shared library: [libnvidia-tls.so.1]
0x0000000000000001 NEEDED               Shared library: [libnvidia-glcore.so.1]
0x0000000000000001 NEEDED               Shared library: [libX11.so.6]
0x0000000000000001 NEEDED               Shared library: [libXext.so.6]
0x0000000000000001 NEEDED               Shared library: [libc.so.7]
0x000000000000000e SONAME               Library soname: [libGL.so.1]
0x0000000000000010 SYMBOLIC             0x0

【问题讨论】:

    标签: opengl nvidia freebsd


    【解决方案1】:

    终于找到了解决办法。 可以通过传递 -u _nv021glcore -u _nv013glcore 来完成编译,这会带回失败的操作码。为了解决这个问题,还需要使用-- +iglx 启动间接渲染,这似乎是默认禁用的,因为它似乎被认为是遗留的openGL

    【讨论】:

    • NVidia 二进制驱动程序有自己的 libGL.so 来替代 Mesa 的。不过,这并不能解释那个奇怪的符号。您可能在使用 NVidia 的 libGL 的系统上编译了二进制文件,然后尝试在使用 Mesa 的系统上运行它。
    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2015-02-12
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多