我正在使用 OpenGL 构建应用程序。我在服务器上安装了多个 OpenGL。
我注意到,即使在运行时在 Makefile 中指定OpenGL库的链接路径后,在运行应用程序时,它仍然会在不同的位置查找库,从而导致错误。
正确的openGL路径是/usr/lib/nvidia-410/
yuqiong@sturfee-dnn:~/sturgRender/assets$ ls /usr/lib/nvidia-410/ | grep GL
libEGL_nvidia.so.0
libEGL_nvidia.so.410.129
libEGL.so
libEGL.so.1
libEGL.so.410.129
libGLdispatch.so.0
libGL.so
libGL.so.1
libGL.so.410.129
libGLX_indirect.so.0
libGLX_nvidia.so.0
libGLX_nvidia.so.410.129
libGLX.so
libGLX.so.0
libOpenGL.so
libOpenGL.so.0
但是要LD_LIBRARY_PATH指出:
yuqiong@sturfee-dnn:~/sturgRender/assets$ echo $LD_LIBRARY_PATH
/usr/local/torch/lib:/usr/local/tensorrt/lib:/usr/local/caffe/lib/:/usr/local/lib;//usr/local/cuda/lib64:/home/yuqiong/TensorRT-7.0.0.11/lib
这将导致应用程序生成eglDisplayError. 但是,更改LD_LIBRARY_PATH为后/usr/lib/nvidia-410/,此错误消失了。
我怀疑这是因为libEGLand是动态加载的libGLX。libOpenGL
但是,在另一台机器上,我使用 构建应用程序CMake,即使LD_LIBRARY_PATH是空的,应用程序仍然链接正确的库。
- 为什么我需要
LD_LIBRARY_PATH在一台机器上指定而不在另一台机器上指定? - 有关在何处加载动态库的信息是存储在系统变量中
LD_LIBRARY_PATH,还是存储在应用程序本身中?