在Linux上使用OpenGL的大多数应用程序(和库)在运行时都使用libGL.so API加载dlopen,而不是对其进行动态链接。

他们为什么这样做呢?

我能想象的唯一原因是因为任何图形驱动程序供应商都提供了不同的libGL,并且两个不同的libGL可能与ABI不兼容。 (嗯,哼,为什么它们应该与ABI不兼容?即使它们兼容,为什么还要通过dlopen加载它们也可以解决此问题?)

无论如何,假设这样做有充分的理由,我也想这样做。是否有人链接到通过dlopen加载所有OpenGL函数的开源C/C++代码,而我无需进行太多调整即可将其包含到我的项目中?

最佳答案

人们这样做的主要原因有两个:

  • 对于没有OpenGL的系统,您可以给出一个明智的错误
  • 供应商提供了许多不同的扩展,并且在不使用每个二进制文件的情况下支持多组扩展的唯一明智的方法是使用dlsym进行检查。 GLEW为您提供了一种不错的方法。
  • 关于c - OpenGL在Linux上: dlopen libGL.所以,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4186281/

    10-12 16:01