/usr/bin/ld:找不到-lGL(Ubuntu 16.04)

/usr/bin/ld:找不到-lGL(Ubuntu 16.04),ubuntu,opengl,gcc,Ubuntu,Opengl,Gcc,我试图在运行在VirtualBox中的Ubuntu 16.04 LTS 64位上编译我的跨平台OpenGL应用程序。但是,它总是在/usr/bin/ld:找不到-lGL时失败 我已经在谷歌上搜索了这个问题,并尝试安装了作为解决方案提到的每个软件包,甚至有几次手动创建了符号链接,等等。。。基本上,我已经尝试了我能找到的任何解决方案。还有什么想法吗?我错过了什么 定位libGL的输出: /usr/lib/libGL.so /usr/lib/nvidia-375/libGL.so /usr/lib/n

我试图在运行在VirtualBox中的Ubuntu 16.04 LTS 64位上编译我的跨平台OpenGL应用程序。但是,它总是在
/usr/bin/ld:找不到-lGL
时失败

我已经在谷歌上搜索了这个问题,并尝试安装了作为解决方案提到的每个软件包,甚至有几次手动创建了符号链接,等等。。。基本上,我已经尝试了我能找到的任何解决方案。还有什么想法吗?我错过了什么

定位libGL的输出

/usr/lib/libGL.so
/usr/lib/nvidia-375/libGL.so
/usr/lib/nvidia-375/libGL.so.1
/usr/lib/nvidia-375/libGL.so.1.0.0
/usr/lib/nvidia-375/libGLESv1_CM.so
/usr/lib/nvidia-375/libGLESv1_CM.so.1
/usr/lib/nvidia-375/libGLESv1_CM_nvidia.so.1
/usr/lib/nvidia-375/libGLESv1_CM_nvidia.so.375.66
/usr/lib/nvidia-375/libGLESv2.so
/usr/lib/nvidia-375/libGLESv2.so.2
/usr/lib/nvidia-375/libGLESv2_nvidia.so.2
/usr/lib/nvidia-375/libGLESv2_nvidia.so.375.66
/usr/lib/nvidia-375/libGLX.so
/usr/lib/nvidia-375/libGLX.so.0
/usr/lib/nvidia-375/libGLX_indirect.so.0
/usr/lib/nvidia-375/libGLX_nvidia.so.0
/usr/lib/nvidia-375/libGLX_nvidia.so.375.66
/usr/lib/nvidia-375/libGLdispatch.so.0
/usr/lib/x86_64-linux-gnu/libGL.so
/usr/lib/x86_64-linux-gnu/libGLEW.so.1.13
/usr/lib/x86_64-linux-gnu/libGLEW.so.1.13.0
/usr/lib/x86_64-linux-gnu/libGLEWmx.so.1.13
/usr/lib/x86_64-linux-gnu/libGLEWmx.so.1.13.0
/usr/lib/x86_64-linux-gnu/libGLU.a
/usr/lib/x86_64-linux-gnu/libGLU.so
/usr/lib/x86_64-linux-gnu/libGLU.so.1
/usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1
/usr/lib/x86_64-linux-gnu/libhybris-egl/libGLESv2.so.2
/usr/lib/x86_64-linux-gnu/libhybris-egl/libGLESv2.so.2.0.0
/usr/lib/x86_64-linux-gnu/mesa/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib32/nvidia-375/libGL.la
/usr/lib32/nvidia-375/libGL.so
/usr/lib32/nvidia-375/libGL.so.1
/usr/lib32/nvidia-375/libGL.so.1.0.0
/usr/lib32/nvidia-375/libGLESv1_CM.so
/usr/lib32/nvidia-375/libGLESv1_CM.so.1
/usr/lib32/nvidia-375/libGLESv1_CM_nvidia.so.1
/usr/lib32/nvidia-375/libGLESv1_CM_nvidia.so.375.66
/usr/lib32/nvidia-375/libGLESv2.so
/usr/lib32/nvidia-375/libGLESv2.so.2
/usr/lib32/nvidia-375/libGLESv2_nvidia.so.2
/usr/lib32/nvidia-375/libGLESv2_nvidia.so.375.66
/usr/lib32/nvidia-375/libGLX.so
/usr/lib32/nvidia-375/libGLX.so.0
/usr/lib32/nvidia-375/libGLX_indirect.so.0
/usr/lib32/nvidia-375/libGLX_nvidia.so.0
/usr/lib32/nvidia-375/libGLX_nvidia.so.375.66
/usr/lib32/nvidia-375/libGLdispatch.so.0
/var/lib/VBoxGuestAdditions/lib/libGL.so.1

(很明显,系统有足够多的libGL可供选择,但它仍然找不到。)

命令行开关禁止它链接到共享库


在链接器命令行中,将
-lGL
替换为
-Wl,-b动态-lGL-static
以仅动态链接
-lGL

-static
命令行开关阻止链接到共享库



在链接器命令行中,将
-lGL
替换为
-Wl,-b dynamic-lGL-static
仅动态链接
-lGL

使用
strace-ffo linker
运行链接器,然后使用
libGL
的grep
linker*
文件查看它在哪个目录中查找
libGL
。@maximegroushkin似乎只在查找
libGL.a
,而不是
libGL.so
。你知道如何更正吗?显示完整的链接器命令行。@MaximeGroushkin
gcc libs/gl3w.c src/*.c-o foo.exe-Ilibs/include-Llibs/lib-static-pedantic errors-lglfw3-lGL-Os
Ubuntu不喜欢静态链接的GL程序吗?使用
strace-ffo linker
和grep
linker*
libGL
的文件,以查看它在哪个目录中查找
libGL
。@MaximEgorushkin似乎只查找
libGL.a
,而不是
libGL.so
。你知道如何更正吗?显示完整的链接器命令行。@MaximeGroushkin
gcc libs/gl3w.c src/*.c-o foo.exe-Ilibs/include-Llibs/lib-static-pedantic errors-lglfw3-lGL-Os
Ubuntu不喜欢静态链接的GL程序吗?这是否意味着我必须在我的应用程序中附带一个.dll,还是可以安全地假设大多数系统都会有一个可用的?@Wingblade您可能想假设目标系统已经安装了OpenGL库。安装GPU所需的图形驱动程序通常是用户的工作。亲爱的,我不知道你可以选择静态/动态链接<代码>lGL现已成功找到@Wingblade和OpenGL生产库似乎不能静态链接。不过我可能错了。@Wingblade:在Linux中,libGL不仅仅是一个库,它实际上是GPU驱动程序用户空间的一部分(这符合Linux标准库和Khronos指定的Linux OpenGL ABI)。这在本质上意味着您不能静态链接libGL,事实上,永远不会有libGL的静态链接版本。有静态链接的OpenGL实现可用,但这些将永远不会被GPU加速,并且总是被命名为libGL以外的名称。这是否意味着我必须随应用程序一起提供一个.dll,或者可以安全地假设大多数系统已经有一个可用的?Wingblade您可能想假设目标系统已经安装了OpenGL库。安装GPU所需的图形驱动程序通常是用户的工作。亲爱的,我不知道你可以选择静态/动态链接<代码>lGL现已成功找到@Wingblade和OpenGL生产库似乎不能静态链接。不过我可能错了。@Wingblade:在Linux中,libGL不仅仅是一个库,它实际上是GPU驱动程序用户空间的一部分(这符合Linux标准库和Khronos指定的Linux OpenGL ABI)。这在本质上意味着您不能静态链接libGL,事实上,永远不会有libGL的静态链接版本。有静态链接的OpenGL实现可用,但这些实现永远不会被GPU加速,并且总是被命名为libGL以外的东西。