【发布时间】:2020-12-06 04:50:21
【问题描述】:
我正在使用 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/后,这个错误就消失了。
我怀疑这是因为 libEGL 和 libGLX 和 libOpenGL 是动态加载的。
但是,在另一台机器上,我使用CMake 构建应用程序,即使LD_LIBRARY_PATH 为空,应用程序仍然链接正确的库。
- 为什么我需要在一台机器上指定
LD_LIBRARY_PATH而不是另一台机器? - 有关在何处加载动态库的信息是存储在系统变量(如
LD_LIBRARY_PATH)中还是存储在应用程序本身中?
【问题讨论】:
-
有人在我发表评论之前进行了编辑,但只是一个友好的提醒,以供将来参考:明确要求异地资源off-topic。以后请尽量避免这种情况。
-
@Chipster 当然。感谢您的有用评论!
标签: c++ opengl makefile cmake build