【问题标题】:Unable to found -lGL, how to do without symlink?找不到-lGL,没有符号链接怎么办?
【发布时间】:2011-12-15 14:23:21
【问题描述】:

我正在编译一个共享库,在 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 附加到库搜索路径。再一次,错了,我怎么知道可以在所有系统上找到该库的每条路径?

所以我真正的问题是:与不在标准位置但位置已经注册到 /etc/ld.so.conf 的库链接的标准和自动方法是什么?

【问题讨论】:

  • 对不起,我正在做 python 扩展。删除标签。

标签: c linux gcc linker ld


【解决方案1】:

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

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

【讨论】:

  • 好的,所以我使用的是标准 linux,我必须添加自己 -L/usr/lib/x86_64-linux-gnu 吗?其他平台呢? (32 位,和其他 linux ?)没有通用的?
  • 在普通的Linux机器上,32位版本在/usr/lib,64位版本在/usr/lib64
  • 是的,所以这不足以自动找到 libGL(顺便说一下,它不在 /usr/lib32 和 /usr/lib 中?)
  • -L/usr/lib/x86_64-linux-gnu 应该是不需要的,因为使用这种 multilib 目录方案的 Debian 应该已经修补了他们的链接器以已经在那里搜索。不,您需要的是链接器搜索的目录中的 libGL.so,这通常由 Mesa(-devel) 包提供。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多