1. 程式人生 > >Ubuntu下解決Qt5.7.0 cannot find -lGL(親測解決)

Ubuntu下解決Qt5.7.0 cannot find -lGL(親測解決)

很久沒用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",得到的答案就是安裝開發庫。

複製程式碼
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 library 2.Then link it under /usr/lib 3.If the library is missing, it can be installed via libgl1-mesa-dev package Here 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 for X11 Requirements的列表裡,並沒有openGL。在OpenGL Dependencies裡,也指明在Qt使用openGL需要#include <QtOpenGL>並且需要在.pro專案配置檔案里加上Qt += opengl。這說明我的程式根本不依賴openGL,決定手動測試一下。

  清理專案,重新編譯一次,然後切換到編譯輸出:

可以看到編譯的引數,我手動進入到對應的目錄,然後改一下編譯引數:

[email protected]:~/Documents/code/build-SPEditor-Desktop_Qt_5_7_0_GCC_64bit-Debug$ rm SPEditor 
[email protected]-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 -lpthread
[email protected]-HP-ProBook-4446s:~/Documents/code/build-SPEditor-Desktop_Qt_5_7_0_GCC_64bit-Debug$ ./SPEditor 
[email protected]-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         += linux

include(unix.conf)

QMAKE_CFLAGS_THREAD    += -D_REENTRANT
QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD
QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections

QMAKE_LFLAGS_REL_RPATH  = -Wl,-z,origin
QMAKE_REL_RPATH_BASE    = $ORIGIN

QMAKE_INCDIR            =
QMAKE_LIBDIR            =
QMAKE_INCDIR_X11        =
QMAKE_LIBDIR_X11        =
QMAKE_INCDIR_OPENGL     =
QMAKE_LIBDIR_OPENGL     =
QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_EGL        =
QMAKE_LIBDIR_EGL        =
QMAKE_INCDIR_OPENVG     =
QMAKE_LIBDIR_OPENVG     =

QMAKE_LIBS              =
QMAKE_LIBS_DYNLOAD      = -ldl
QMAKE_LIBS_X11          = -lXext -lX11 -lm
QMAKE_LIBS_NIS          = -lnsl
QMAKE_LIBS_EGL          = -lEGL
QMAKE_LIBS_OPENGL       = -lGL
QMAKE_LIBS_OPENGL_ES2   = -lGLESv2
QMAKE_LIBS_OPENVG       = -lOpenVG
QMAKE_LIBS_THREAD       = -lpthread
QMAKE_LIBS_LIBUDEV      = -ludev

QMAKE_CFLAGS_WAYLAND    =
QMAKE_INCDIR_WAYLAND    =
QMAKE_LIBS_WAYLAND_CLIENT = -lwayland-client
QMAKE_LIBS_WAYLAND_SERVER = -lwayland-server
QMAKE_LIBDIR_WAYLAND    =
QMAKE_DEFINES_WAYLAND   =
QMAKE_WAYLAND_SCANNER   = wayland-scanner

QMAKE_CFLAGS_XCB        =
QMAKE_LIBS_XCB          =
QMAKE_DEFINES_XCB       =

QMAKE_AR                = ar cqs
QMAKE_OBJCOPY           = objcopy
QMAKE_NM                = nm -P
QMAKE_RANLIB            =

QMAKE_STRIP             = strip
QMAKE_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解決

很久沒用Qt了,這次要做一個協議編輯器,在ubuntu 14.04上安裝了最新版本的Qt 5.7.0。介面改用扁平化風格,第一感覺還不錯。按預設步驟建立了一個gui程式,編譯執行,報了一個錯:cannot find -lGL。   作為一個用慣了makefile的程式

UbuntuQt編譯報錯“cannot find -lGL”的解決方案

Solved the problem by installing the “libglu1-mesa-dev” package. sudo apt-get install libglu1-mesa-dev -y

解決Qt5.9.2 cannot find -lGL

在部署程式到ubuntu上的時候提示找不到庫,解決方法為: you don't need to install anything. libGL is already installed with Ubuntu, you just need to soft link it.

mac iterm2終端安裝rz sz 命令方法可用

1.首先下載item2,地址:http://www.iterm2.cn/download2.然後需要下載 iterm2-send-zmodem.sh 和 iterm2-recv-zmodem.sh 儲存到mac的 /usr/local/bin/ 路徑下(因為bin是環境變數中

Ubuntu使用qt編譯時出現cannot find -lGL錯誤解決辦法

使用qtcreator編譯時出現:-1: error: cannot find -lGL這樣的錯誤, 這是由於缺少連結庫原因造成的,使用下面命令: sudo apt-get install libqt4-dev 或者 sudo apt-get install libgl1-mesa-dev

Ubuntu16.04 QT5編譯出現cannot find -lGL和collect2:error:ld r

鍵盤輸入 gre ase 系統 erro ace replace inux collect 在ubuntu下使用Qt 編譯時候遇上了cannot find -lGL錯誤,使用命令 是由於系統缺少鏈接庫,在終端執行下面命令就可以解決問題。 sudo apt-get inst

JSONException: syntax error, expect {, actual [, pos 0 異常的解決方法有效

出現這個問題一般是出現在json格式轉換成java物件的時候,比如我們有這麼一段json資料: [{"accept_address":"廣東省深圳市軟體產業基地","remark":"順豐速運 已收取快件(測試資料)","opcode":50,"accept_time":"2018-05-0

解決cannot resolve symbol “xxxx”的問題有效

今天做專案的時候匯入了一個api介面,並且把附帶的jar包也拷貝到了Maven專案中,但是有個方法一直報cannot resolve symbol “xxxx”。 百思不得其解,在網上搜了各種各樣的方法也沒有解決,這個問題其實就是無法解析某方法,也可以說是找不到,那麼就是我們的依賴出了問題,

centos 7.0 用yum 安裝mysql 可用18年11月20日

用最少的命令完成mysql的建立 1安裝 yum -y install mariadb mariadb-server 2啟動 systemctl start mariadb 3開機自動啟動 systemctl enable mariadb 接下來進行MariaDB的相關簡單配置

Centos6.5安裝mysql5.7版本有效

Step1: 檢測系統是否自帶安裝mysql # yum list installed | grep mysql Step2: 刪除系統自帶的mysql及其依賴 命令: # yum -y remove mysql-libs.x86_64 Step3: 給CentOS新增rp

Python命令列退格、刪除、方向鍵亂碼問題解決有效

一. 出現原因:readline模組沒有安裝 二. 解決方式: # 安裝readline模組yum -y install readline-devel# 進入Python安裝目錄cd /usr/local/Python-2.7.12# 重新執行Python的安裝configuremakemake insta

UEFI啟動的windows安裝Ubuntu雙系統可行

       不瞞你說,我和你一樣,曾經把ubuntu kylin14.04和win7/8/8.1安裝在一起,win7沒有問題,因為win7我用的是一臺比較老的電腦,不是UEFI啟動模式,但是我自己電腦上裝的正版win8/6.1是UEFI引導模式的,當我按照網上的教程裝好Ub

UEFI Windows 10 安裝 Ubuntu 雙系統有效

什麼是 UEFI UEFI 如何判斷自己的電腦是不是預裝的 UEFI 如果你的電腦在購買時預裝系統是 Windows 8 的話,預裝的就是 UEFI 。 判斷自己的電腦是否是 UEFI 啟動 Windows 10 、Ubuntu 雙系統的準

Ubuntu純程式碼編寫簡易貪吃蛇遊戲第二次做

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h

解決win10VM12虛擬機器橋接模式不能上網的方法可行

本文的方法可解決如下兩個問題: 1。區域網中其他機器ping不通本機中的虛擬機器。 2。本機中的虛擬機器採用橋接模式不能上網,甚至主機也不能上網。 注意:自己區域網的IP起始地址及路由器地

有效解決asp.net專案localhost可以訪問,127.0.0.1和本機ip訪問不了錯誤400

網上看了很多種方法比如修改hosts檔案。但是我的hosts檔案有127.0.0.1   localhost。還有一種方法是把網站釋出到IIS,但是我只是做個測試,這樣太麻煩。最終去查了下IIS的網點配置,找到了問題所在1.用vs執行你的網站(一定要用管理員身份執行vs,非常

Ubuntu Bitcoin編譯,單步除錯環境搭建step by step

為了不被時代拋棄,連一聲再見都不說。最近開始研究bitcoin,主要是對C++比較熟。學習一項新技術,為達到效果,根據個人經驗從下面三個方面入手: 1. 買一本介紹原理的書,系統的瞭解,為什麼?因為書是別人智慧的總結,是一個完整的系統知識,站在前人肩膀遠勝過網路碎片化知識。

Linux使用Vi時方向鍵變亂碼、刪除鍵不能使用的解決方法有效

在Linux下編輯一些檔案,這就涉及到了Vi這個編輯器。在Linux下,初始使用Vi的時候有兩個典型的問題: 1、在編輯模式下使用方向鍵的時候,並不會使游標移動,而是在命令列中出現A、B、C、D四個字母; 2、當編輯出現錯誤,想要刪除時,發現Backspace鍵不起作用,只

如何讓 Windows,Ubuntu(Linux)的 Chrome 支援 WebGL ?有效

tensorflow.js needs WebGL.But my chrome does not support WebGL. I have only  virtualbox in which chrome runs.My god,I have no money to buy

解決WindowsVim中無法輸入中文

文章目錄 一、Vim下載地址 1.2 百度網盤:Vim8下載 密碼:ziki 二、Windows下Vim中無法輸入中文 2.1 問題描述 今天下載Vim8在win10上安裝之後發現居然無法輸入中文,琢磨了好久,