ATI propietary driver重命名libGL.so

时间:2015-01-12 00:14:10

标签: c++ opengl makefile cmake linuxmint

我最近重新安装了linux(模板17),在我构建并运行我的项目后,它抱怨无法加载swrast。我想我必须安装ati驱动程序,确实解决了这个问题:

Graphics:  Card: Advanced Micro Devices [AMD/ATI] Oland XT [Radeon HD 8670 / R7 250] bus-    ID: 01:00.0 
X.Org: 1.15.1 driver: fglrx Resolution: 1920x1080@60.0hz 
GLX Renderer: AMD Radeon R7 200 Series GLX Version: 4.4.13283 - CPC 14.501.1003 Direct Rendering: Yes

我现在遇到的问题是我再也无法构建项目了,因为make无法找到libGL.so

No rule to make target `/usr/lib/x86_64-linux-gnu/libGL.so

看了一下,似乎有一个重命名的版本,我不知道发生了什么......

/usr/lib/FGL.renamed.libGL.so.1.2
/usr/lib/libGL.so
/usr/lib/libGL.so.1
/usr/lib/libGL.so.1.2
/usr/lib/fglrx/fglrx-libGL.so.1.2
/usr/lib/i386-linux-gnu/libGL.so
/usr/lib/i386-linux-gnu/libGL.so.1
/usr/lib/i386-linux-gnu/libGL.so.1.2
/usr/lib/i386-linux-gnu/fglrx/fglrx-libGL.so.1.2
/usr/lib/i386-linux-gnu/mesa/FGL.renamed.libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/mesa/FGL.renamed.libGL.so.1.2.0

我想我必须创建一些链接,但我不知道哪个。我过去做过,它搞砸了ati装置。

1 个答案:

答案 0 :(得分:2)

  

看了一下,似乎有一个重命名的版本,我不知道发生了什么......

libGL.so是GPU驱动程序的一部分(实际上它包含整个OpenGL实现)。这与Windows不同,其中opengl32.dll为驱动程序附加自身提供了挂钩。从技术上讲,最好在Linux中使用这种挂钩机制,但不幸的是我们没有。

为了缓解这种情况,Linux发行版的软件包管理器通常会将驱动程序的libGL.so安装到一个隔离的目录中,并在/usr/lib/中创建一个符号链接。由于某种原因,发行版的包管理器未安装的专有驱动程序的二进制包不遵循该约定,只是对此结构的破坏。

老实说,在此期间实现挂钩机制要容易得多,而不是创建这些符号链接kludges。