2011-12-15 111 views
1

我正在编译一个共享库,在ld命令上有一个-lGL。但它在我的系统上找不到libGL.so。 Nvidia包正确设置库路径/etc/ld.so.conf.d/。 即使是ldconfig -p | grep libGL.so输出发现:无法找到-lGL,没有符号链接怎么办?

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 

我看了几乎无处不在,为了能够与它联系起来,我已经基本解决方案2:

  1. 链接NVIDIA的libGL.so到标准/ usr/lib位置。对于任何想要编译一个opengl库的人来说,这似乎都是错误的。为什么链接器不使用ldconfig缓存?

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

所以我的真正的问题是:什么是对与图书馆没有连接在一个标准的位置,但位置已经与/etc/ld.so.conf注册标准和自动的方法吗?

+0

为什么这个标记的python? – mkb 2011-12-15 14:30:05

+0

对不起,我在做python扩展。删除标签。 – tito 2011-12-15 14:31:15

回答

1

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

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