无法找到-lGL,没有符号链接怎么办?

时间:2011-12-15 14:23:21

标签: c linux gcc linker ld

我正在编译一个共享库,在ld命令上使用-lGL。但它在我的系统上找不到libGL.so。 Nvidia包在/etc/ld.so.conf.d/中正确设置了库路径。 甚至ldconfig -p | grep libGL.so的输出也发现了它:

libGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-current/libGL.so.1
libGL.so.1 (libc6) => /usr/lib32/nvidia-current/libGL.so.1
libGL.so (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/libGL.so
libGL.so (libc6,x86-64) => /usr/lib/nvidia-current/libGL.so
libGL.so (libc6, OS ABI: Linux 2.4.20) => /usr/lib32/libGL.so
libGL.so (libc6) => /usr/lib32/nvidia-current/libGL.so

我几乎无处不在地阅读能够与之链接的内容,我基本上有两种解决方案:

  1. 将nvidia libGL.so链接到标准的/ usr / lib位置。对于任何试图编译opengl库的人来说,这似乎是错误的。为什么链接器没有使用ldconfig缓存?

  2. 手动将-L / usr / lib / nvidia-current附加到库搜索路径。再次,错了,我怎么知道在所有系统上可以找到库的每条路径?

  3. 所以我真正的问题是:标准和自动方法与标准位置的库相关联,但位置是否已经注册/etc/ld.so.conf

1 个答案:

答案 0 :(得分:1)

/etc/ld.so.conf使用

/lib/ld.so来解析运行时的共享库,它与编译时链接东西无关。

正确的方法是在libGL.so中链接到/usr/lib/x86_64-linux-gnu/,应用程序将在运行时使用nvidia的libGL.so。这不应该是一个问题,因为OpenGL接口是稳定的,两个库中的符号是相同的,它的实现是不同的。