Ubuntu下解决Qt5.7.0 cannot find -lGL(亲测解决)
来源:互联网 发布:淘宝小鸡孵化机 编辑:程序博客网 时间:2024/06/04 18:18
很久没用Qt了,这次要做一个协议编辑器,在ubuntu 14.04上安装了最新版本的Qt 5.7.0。界面改用扁平化风格,第一感觉还不错。按默认步骤创建了一个gui程序,编译运行,报了一个错:cannot find -lGL。
作为一个用惯了makefile的程序员,知道是少了库文件,而且名字应该为libGL.a或者libGL.so。到网上搜索一下,发现GL是openGL的缩写,显然是缺少openGL的开发库。安装命令为:sudo apt-get install libgl1-mesa-dev。在网上搜索关键字"cannot find -lGL",得到的答案就是安装开发库。
openGL是一个巨大的库,而我只是做个编辑器而已,又不是什么2D、3D的程序,明显用不到openGL的。于是我到stackoverflow搜索了一下,找到了答案:http://stackoverflow.com/questions/18406369/qt-cant-find-lgl-error
you don't need to install anything. libGL is already installed with Ubuntu, you just need to soft link it. (works for ubuntu 14.x and 15.x)1.First locate the GL library2.Then link it under /usr/lib3.If the library is missing, it can be installed via libgl1-mesa-dev packageHere is how you could do this:$ locate libGL/usr/lib/i386-linux-gnu/mesa/libGL.so.1/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0/usr/lib/x86_64-linux-gnu/libGLEW.so.1.10/usr/lib/x86_64-linux-gnu/libGLEW.so.1.10.0/usr/lib/x86_64-linux-gnu/libGLEWmx.so.1.10/usr/lib/x86_64-linux-gnu/libGLEWmx.so.1.10.0/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/mesa/libGL.so.1/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0/usr/lib/x86_64-linux-gnu/mesa-egl/libGLESv2.so.2/usr/lib/x86_64-linux-gnu/mesa-egl/libGLESv2.so.2.0.0$ sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so
(也就是说,只要先输入:locate libGL,回车后再输入:sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1/usr/lib/libGL.so 问题即宣告解决)
我的系统确实存在libGL.so.1.2.0这个文件。按他的方法解决了问题。如果你的系统确实没这个文件,那真是要安装了。
程序能跑起来了,不过并没有解决我的疑问:Qt的gui真的需要依赖openGL么?搜索官方的文档,找到了答案:http://doc.qt.io/qt-5/linux-requirements.html
在Qt for X11 Requirements的列表里,并没有openGL。在OpenGL Dependencies里,也指明在Qt使用openGL需要#include <QtOpenGL>并且需要在.pro项目配置文件里加上Qt += opengl。这说明我的程序根本不依赖openGL,决定手动测试一下。
清理项目,重新编译一次,然后切换到编译输出:
可以看到编译的参数,我手动进入到对应的目录,然后改一下编译参数:
xzc@xzc-HP-ProBook-4446s:~/Documents/code/build-SPEditor-Desktop_Qt_5_7_0_GCC_64bit-Debug$ rm SPEditor xzc@xzc-HP-ProBook-4446s:~/Documents/code/build-SPEditor-Desktop_Qt_5_7_0_GCC_64bit-Debug$ g++ -Wl,-rpath,/opt/Qt5.7.0/5.7/gcc_64/lib -o SPEditor main.o mainwindow.o moc_mainwindow.o -L/opt/Qt5.7.0/5.7/gcc_64/lib -lQt5Widgets -L/usr/lib64 -lQt5Gui -lQt5Core -lpthreadxzc@xzc-HP-ProBook-4446s:~/Documents/code/build-SPEditor-Desktop_Qt_5_7_0_GCC_64bit-Debug$ ./SPEditor xzc@xzc-HP-ProBook-4446s:~/Documents/code/build-SPEditor-Desktop_Qt_5_7_0_GCC_64bit-Debug$
不使用-lGL参数编译链接的程序,也可以正常跑,验证了我的想法。
既然不依赖openGL,为什么要链接openGL呢?首先在链接参数里加额外-lGL对生成的程序并没有影响,你的程序里没有调用openGL的方法,不会有任何额外的代码链接进去。而Qt是一个跨平台的库,里面包含一些3D的库。要Qt Creator非常智能地根据程序生成依赖,这个有点难,也没必要。所以我觉得作者干脆把这些常用的库都加到链接参数里,一了百了。
这些预先定好的参数,按平台放在安装目录的mkspecs目录的,比如我的就在opt/Qt5.7.0/5.7/gcc_64/mkspecs。存细看链接参数,你会发现
-I/opt/Qt5.7.0/5.7/gcc_64/mkspecs/linux-g++这要的路径,这是Qt的跨平台配置。我的机子上,在
/opt/Qt5.7.0/5.7/gcc_64/mkspecs/common/linux.conf可以找到这样的配置
## qmake configuration for common linux#QMAKE_PLATFORM += linuxinclude(unix.conf)QMAKE_CFLAGS_THREAD += -D_REENTRANTQMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREADQMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sectionsQMAKE_LFLAGS_REL_RPATH = -Wl,-z,originQMAKE_REL_RPATH_BASE = $ORIGINQMAKE_INCDIR =QMAKE_LIBDIR =QMAKE_INCDIR_X11 =QMAKE_LIBDIR_X11 =QMAKE_INCDIR_OPENGL =QMAKE_LIBDIR_OPENGL =QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGLQMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGLQMAKE_INCDIR_EGL =QMAKE_LIBDIR_EGL =QMAKE_INCDIR_OPENVG =QMAKE_LIBDIR_OPENVG =QMAKE_LIBS =QMAKE_LIBS_DYNLOAD = -ldlQMAKE_LIBS_X11 = -lXext -lX11 -lmQMAKE_LIBS_NIS = -lnslQMAKE_LIBS_EGL = -lEGLQMAKE_LIBS_OPENGL = -lGLQMAKE_LIBS_OPENGL_ES2 = -lGLESv2QMAKE_LIBS_OPENVG = -lOpenVGQMAKE_LIBS_THREAD = -lpthreadQMAKE_LIBS_LIBUDEV = -ludevQMAKE_CFLAGS_WAYLAND =QMAKE_INCDIR_WAYLAND =QMAKE_LIBS_WAYLAND_CLIENT = -lwayland-clientQMAKE_LIBS_WAYLAND_SERVER = -lwayland-serverQMAKE_LIBDIR_WAYLAND =QMAKE_DEFINES_WAYLAND =QMAKE_WAYLAND_SCANNER = wayland-scannerQMAKE_CFLAGS_XCB =QMAKE_LIBS_XCB =QMAKE_DEFINES_XCB =QMAKE_AR = ar cqsQMAKE_OBJCOPY = objcopyQMAKE_NM = nm -PQMAKE_RANLIB =QMAKE_STRIP = stripQMAKE_STRIPFLAGS_LIB += --strip-unneeded
如果你的程序确实用不着openGL,并且以后也不打算写这样的程序,把QMAKE_LIBS_OPENGL = -lGL这个去掉就可以了。
原文链接:https://www.cnblogs.com/coding-my-life/p/5677256.html
- Ubuntu下解决Qt5.7.0 cannot find -lGL(亲测解决)
- Ubuntu Qt出现cannot find -lGL解决
- Qt5.5在ubuntu下解决 GL/gl.h: No such file or directory 与 cannot find -lGL
- Qt5.5在ubuntu下解决 GL/gl.h: No such file or directory 与 cannot find -lGL
- qt5 cannot find -lGL
- qt5 cannot find -lGL
- ubuntu下使用Qt 编译时cannot find -lGL错误解决
- Ubuntu 16.04 下Qt编译出现“cannot find -lGL”及无法安装libgl1-mesa-dev解决
- 解决Ubuntu 16下编译Qt 5报错:cannot find -lGL
- Ubuntu环境QT出现:-1: error: cannot find -lGL(已解决)
- Ubuntu环境QT出现:-1: error: cannot find -lGL(已解决)
- Ubuntu环境QT出现:-1: error: cannot find -lGL(已解决)
- 解决CentOS遇到Qt编译(error: cannot find -lGL)
- 解决CentOS遇到Qt编译(error: cannot find -lGL)
- 解决:-1: error: cannot find -lGL
- QT5.3.1编译出错,如何解决?cannot find -lGL 且libGL库已经安装。
- 解决Qt5 安装Opengl后依然出现/usr/bin/ld: cannot find lGL
- qt5 cannot find -lGL解决方法
- ArrayList
- The Hendrie Sequence UVA
- CityMaker平台下用C#实现不同场景切换的实现方法
- spring boot的发布方式
- (二)springboot整合thymeleaf模板
- Ubuntu下解决Qt5.7.0 cannot find -lGL(亲测解决)
- C/c++课堂笔记-指针赋值
- Percona 家的 ProxySQL 配置笔记
- Java练手小程序——QQ聊天
- SDK Location&failed to find build tools revision xxx
- #我的电路实践
- 从零到向Github提交代码
- SharePoint Online 创建图片库
- Spring Cloud构建微服务架构服务注册与发现