我的文件链接到libGL.so.1
my files linking to libGL.so.1
好的,所以我不确定这是否发生相应的,但当我使用g++我的文件似乎链接到libGL.so。1
下面是我运行ldd
时的部分输出ldd a.out
linux-vdso.so.1 => (0x00007fff151fe000)
libGLEW.so.1.10 => /usr/lib/x86_64-linux-gnu/libGLEW.so.1.10 (0x00007f86d4242000)
libglfw.so.3 => /usr/lib/libglfw.so.3 (0x00007f86d4028000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f86d3cf8000)
现在当我搜索我的libGL。在相同的目录下/usr/lib/x86....../libGL.so
现在我的问题是为什么它链接到……libGL.so
我似乎也安装了mesa-dev库,但我想确保我的GL链接是针对图形驱动程序而不是mesa库,我需要卸载mesa驱动程序并在这里重新链接库吗?
我需要删除libgl1-mesa*文件吗?当我安装了显卡驱动程序时,需要它们吗?
ldd
显示了程序有效地链接到的内容。不是在编译时给出了哪个文件或库。共享对象有一个叫做soname的东西,这是一种版本控制系统。当您的程序与libGL.so
链接时,链接器从使用的特定样本中提取,该名称实际上是libGL.so.1
,并将该名称放入程序二进制文件中。
在运行时,动态链接器ld.so
在整个目录范围中查找与此名称匹配的共享对象。可配置目录列表,参见man ld.so
和man ldconfig
。
现在libGL.so
是一个棘手的野兽。它通常作为图形驱动程序的一部分发布。对于Linux,有几个驱动程序包:
- Mesa,开源OpenGL实现和驱动
- NVidia的专有blob
- AMD的专有blob
然而,在不同供应商的gpu系统上,事情变得棘手;在Linux上没有正式指定的ICD机制。但是存在(相当多的)libGL。因此,调度程序/代理会查看进程启动时所在的图形环境,并加载相应的供应商libGL。从这里开始。通常的实现是启动一个小的辅助程序,它使用GLX传输来创建一个间接的OpenGL上下文,读取OpenGL版本字符串并返回实际libGL的路径。所以用了be。这是有效的,因为X服务器中的GLX模块与OpenGL实现的关系是硬编码的,GLX可以在不需要libGL的情况下进行对话。so(参见Xcb中的GLX模块)。
一般来说,如果你不知道你在做什么,你不应该乱动系统中的共享对象。只要把你的程序链接到-lGL
,链接器就会从那里开始。
- 如何使用ndk-build.cmd构建Android.so文件
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- CLANG格式在缺少libtinfo.so.5库中不起作用
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- 使 ld 忽略来自 /etc/ld.so.conf 的目录
- N-API include an .so or dll
- 加载共享库时C++错误:libopencv_ximgproc.so.4.4
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 用于构建 cuda .so 文件(共享库)的生成文件
- 无法从 SO 文件调用 SO 文件的函数 - C++生成文件
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 在jupyter notebook和google colab中使用.so
- 如何在 C++ 的 .so 文件中包含库
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 链接 openGL 库失败,因为它无法打开 libgl.so ...但它就在那里
- ATI 专有驱动程序重命名 libGL.so
- Qt 5.4.0 在 libGL.so.1 上安装失败,但 libgl-dev 和 ibglu-dev 已经安装
- 我的文件链接到libGL.so.1