我安装了 nvidia-current 用于 CUDA 开发,其中包括libGL.so
。
sudo ldconfig -v
显示此输出:
...
/usr/lib/nvidia-current:
libnvidia-compiler.so.195.36.24 -> libnvidia-compiler.so.195.36.24
libcuda.so.1 -> libcuda.so.195.36.24
libXvMCNVIDIA_dynamic.so.1 -> libXvMCNVIDIA.so.195.36.24
libnvidia-cfg.so.1 -> libnvidia-cfg.so.195.36.24
libGL.so.1 -> libGL.so.195.36.24
libnvidia-tls.so.1 -> libnvidia-tls.so.195.36.24
libOpenCL.so.1 -> libOpenCL.so.1.0.0
libGLcore.so.1 -> libGLcore.so.195.36.24
...
为什么链接器找不到该库?
如果我从尝试编译的目录中运行 make,链接器将找不到。但如果我仅使用标志运行gcc
或,它似乎可以正常工作。我得到:ld
-lGL
/usr/lib/../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
在我看来它正在工作...但不能与 make 一起工作......
答案1
默认情况下,链接器不会查找非标准目录。您需要/usr/lib/nvidia-current
使用-L
标志来确保它正在查找。
此外,您必须安装开发文件。libGL.so
必须存在指向库的正确版本的符号链接。但一般来说,这应该针对标准 mesa GL 库进行,并且应在运行时使用 nvidia 文件。