我正在编译一个共享库,在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
我几乎无处不在地阅读能够与之链接的内容,我基本上有两种解决方案:
将nvidia libGL.so链接到标准的/ usr / lib位置。对于任何试图编译opengl库的人来说,这似乎是错误的。为什么链接器没有使用ldconfig缓存?
手动将-L / usr / lib / nvidia-current附加到库搜索路径。再次,错了,我怎么知道在所有系统上可以找到库的每条路径?
所以我真正的问题是:标准和自动方法与标准位置的库相关联,但位置是否已经注册/etc/ld.so.conf
?
答案 0 :(得分:1)
/etc/ld.so.conf
使用 /lib/ld.so
来解析运行时的共享库,它与编译时链接东西无关。
正确的方法是在libGL.so
中链接到/usr/lib/x86_64-linux-gnu/
,应用程序将在运行时使用nvidia的libGL.so
。这不应该是一个问题,因为OpenGL接口是稳定的,两个库中的符号是相同的,它的实现是不同的。