Ubuntu 22.04 Qt5.12.9编译出现“cannot find -lGL”解决

在Linux系统下安装好Qt5,打开Qt Creator新建一个最简单的工程,编译却出现"cannot find -lGL"错误。

:-1: error: cannot find -lGL: No such file or directory
在网上搜索解决方法,找到的方案一:执行apt-get install libglu1-mesa-dev

glen@ubuntu:~/linux/Qt$ sudo apt-get install libglu1-mesa-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
 libglu1-mesa-dev : 依赖: libglu1-mesa (= 9.0.1-1build1) 但是 9.0.2-1 正要被安装
                    依赖: libgl1-mesa-dev 但是它将不会被安装 或
                            libgl-dev 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

发现提示信息中依赖libgl1-mesa-dev,于是执行apt-get install libglu1-mesa-dev

glen@ubuntu:~/linux/Qt$ sudo apt-get install libgl1-mesa-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
 libgl-dev : 依赖: libgl1 (= 1.3.2-1~ubuntu0.20.04.2) 但是 1.4.0-1 正要被安装
             依赖: libglx-dev 但是它将不会被安装
 libglvnd-dev : 依赖: libglvnd0 (= 1.3.2-1~ubuntu0.20.04.2) 但是 1.4.0-1 正要被安装
                依赖: libegl-dev (>= 1.3.0-1) 但是它将不会被安装
                依赖: libgles-dev (>= 1.3.0-1) 但是它将不会被安装
                依赖: libglx-dev (>= 1.3.0-1) 但是它将不会被安装
                依赖: libopengl-dev (>= 1.3.0-1) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

问题也没解决。搜索发现aptitude命令并尝试安装libglu1-mesa-dev

glen@ubuntu:~/linux/Qt/build-Test-GLEN_IMX6U-Debug$ sudo aptitude install libglu1-mesa-dev
下列“新”软件包将被安装。         
  libglu1-mesa-dev{b} 
0 个软件包被升级,新安装 1 个,0 个将被删除, 同时 1 个将不升级。
需要获取 207 kB 的存档。解包后将要使用 998 kB。
下列软件包存在未满足的依赖关系:
 libglu1-mesa-dev : 依赖: libglu1-mesa (= 9.0.1-1build1) 但是 9.0.2-1 已安装
                    依赖: libgl1-mesa-dev 但它是不可安装的 或者
                            libgl-dev 但它是不可安装的
下列动作将解决这些依赖关系:

     保持 下列软件包于其当前版本:
1)     libglu1-mesa-dev [未安装的]



是否接受该解决方案?[Y/n/q/?] y
将不会安装,升级或者删除任何软件包。
0 个软件包被升级,新安装 0 个,0 个将被删除, 同时 1 个将不升级。
需要获取 0 B 的存档。解包后将要使用 0 B。
                                 
当前状态:80422 (+2) new。

问题仍没有解决,于是想到是不是Ubuntu版本太高了,想降级到Ubuntu18.04,结果也失败了。有些不甘心重装系统,重新搜索cannot find -lGL,找到了这篇文章 https://www.jianshu.com/p/e1b2511c7cda ,即方案二:搜索系统中已经存在的libgl1-mesa-dev相关文件,使用find /usr -name libGL*命令搜索(libgl1-mesa-dev是有关OpenGL的库)

glen@ubuntu:~/linux/Qt$ find /usr -name libGL*
/usr/share/code/libGLESv2.so
/usr/lib/libGL.so.bak
/usr/lib/x86_64-linux-gnu/libGLESv2.so.2.1.0
/usr/lib/x86_64-linux-gnu/libGL.so.1
/usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1
/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0
/usr/lib/x86_64-linux-gnu/libGLESv2.so.2
/usr/lib/x86_64-linux-gnu/libGL.so.1.7.0
/usr/lib/x86_64-linux-gnu/libGLU.so.1
/usr/lib/x86_64-linux-gnu/libGLX.so.0
/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0

搜索结果中发现/usr/lib/x86_64-linux-gnu/libGL.so.1文件(这个文件也可能在另一个目录中)。然后使用ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/libGL.so命令给已存在的库文件创建一个链接到/usr/lib目录。

glen@ubuntu:~/linux/Qt$ ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/libGL.so
glen@ubuntu:~/linux/Qt$ ls /usr/lib/libGL.so -ll
lrwxrwxrwx 1 root root 36 1024 22:54 /usr/lib/libGL.so -> /usr/lib/x86_64-linux-gnu/libGL.so.1

然后在Qt Creator中再次编译工程,错误消失。
编译成功,运行不过编译出现了以下警告:
Qt Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.

按如下修改:

sudo vi /etc/gdm3/custom.conf 
# GDM configuration storage
#
# See /usr/share/gdm/gdm.schemas for a list of available options.

[daemon]
# Uncomment the line below to force the login screen to use Xorg
# WaylandEnable=false

# Enabling automatic login
#  AutomaticLoginEnable = true
#  AutomaticLogin = user1

# Enabling timed login
#  TimedLoginEnable = true
#  TimedLogin = user1
#  TimedLoginDelay = 10

把 #WaylandEnable=false 这行注释符#删除,重启系统,警告消除。

<think>首先,用户的问题是关于Qt编译错误:"cannot find -lgl"。错误信息表明链接器无法找到名为"libgl"的库文件。我需要根据系统指令和提供的引用来解决这个问题。 系统级指令: - 所有行内数学表达式用$...$格式。例如:$x^2$。 - 独立公式用$$...$$格式并单独成段。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾添加引用标识,如[^1]。 - 回答结构清晰,逐步解决问题。 用户问题:解决Qt编译时出现的"cannot find -lgl"错误。 参考引用: - 引用[1]:提到了解决类似错误的方法,如添加路径到.bashrc和.profile,并运行命令来安装缺失的库。 - 引用[2]:关于gcc编译报错"cannot find -lc",解决方案是安装32位库。 - 引用[3]:关于clang报错,解决方案是正确传递头文件路径。 关键点: - 错误"cannot find -lgl"通常是因为缺少OpenGL库。在Linux系统中,这可能是libgl或libgl-dev包未安装。 - 从引用[1]中,用户提到了一个解决步骤:运行命令来安装库,如sudo apt-get install libgl1-mesa-dev或类似。 - 引用[1]的具体命令是:终端运行:sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev。 因此,解决方案应该包括: 1. 安装缺失的OpenGL开发库。 2. 确保路径正确设置(如引用[1]中提到的添加bin路径到环境变量)。 3. 对于Qt,可能需要安装Qt的OpenGL组件。 回答结构: - 逐步解释解决方案。 - 使用中文。 - 添加引用标识。 - 生成相关问题。 大纲回答: 1. **理解错误**:解释错误原因(链接器找不到libgl库)。 2. **解决方案**: - 安装OpenGL开发库:运行命令如sudo apt-get install libgl1-mesa-dev。 - 验证安装。 - 如果使用Qt Creator,检查项目配置。 3. **引用添加**:在相关部分末尾添加引用。 4. **相关问题**:生成几个相关问题。 生成相关问题: - 1. 如何防止Qt编译时出现类似库缺失错误? - 2. Qt中OpenGL库的常见问题有哪些? - 3. 如何配置Qt环境以避免路径问题? 确保LaTeX语法正确:在这个上下文中,可能不需要数学表达式,但如果涉及,要正确格式化。例如,如果提到版本号,可以写成$Qt5.5.1$,但可能不需要。 最终回答: - 以清晰、步骤化的方式呈现。 - 结尾添加相关问题。</think>### 解决Qt编译错误"cannot find -lgl" 在Qt编译过程中,出现`cannot find -lgl`错误通常是因为链接器无法找到OpenGL库文件(libgl)。这常见于Linux系统(如Ubuntu),主要原因是缺失OpenGL开发包或路径配置不当。下面我将逐步指导您解决此问题,确保编译顺利进行。解决方案基于常见Linux发行版(如Ubuntu),并参考了类似错误的处理经验[^1][^2]。 #### 步骤1: 安装OpenGL开发库 错误的核心是系统缺少OpenGL库文件。您需要安装相关的开发包: - **打开终端**,运行以下命令安装OpenGL和Mesa库: ```bash sudo apt-get update # 更新软件包列表 sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev ``` 这些包提供了`libgl`库(`libgl.so`文件),Qt编译时会自动链接它们[^1]。 - **验证安装**:检查库文件是否存在: ```bash ls /usr/lib/x86_64-linux-gnu/libgl* # 64位系统路径 ``` 如果输出中包含`libgl.so`,表示安装成功。 #### 步骤2: 检查Qt环境变量 如果安装库后错误仍存在,可能是Qt环境变量未正确设置。参考Qt安装路径(如`/opt/Qt5.5.1`),确保系统能找到Qt的工具链: - **编辑环境文件**: - 打开`~/.bashrc`文件: ```bash nano ~/.bashrc ``` - 在文件末尾添加Qt的bin路径(替换为您的实际安装路径): ```bash export PATH="/opt/Qt5.5.1/5.5/gcc_64/bin:$PATH" # 示例路径,根据您的Qt版本调整 ``` - 保存文件并运行: ```bash source ~/.bashrc # 使更改生效 ``` - **验证qmake**:运行`qmake -v`,如果输出Qt版本信息,说明路径设置正确[^1]。 #### 步骤3: 检查Qt项目配置 在Qt Creator中,错误的项目配置可能导致链接问题: - **打开Qt Creator**,转到项目设置(Project > Build & Run)。 - **在Build Settings中**: - 确保`Additional Libraries`包含`-lGL`(如果缺失,手动添加)。 - 检查`Library Paths`是否包含OpenGL库路径(如`/usr/lib/x86_64-linux-gnu`)。 - **清理并重新构建**:在Qt Creator中,选择`Build > Clean All`,然后重新编译项目。 #### 步骤4: 处理多架构问题(可选) 如果您在编译32位程序时遇到类似错误(如引用[2]中的`cannot find -lc`),可能需要安装32位兼容库: ```bash sudo apt-get install gcc-multilib # 安装32位支持 ``` 然后重新运行Qt编译命令。 #### 常见问题排查 - **错误未解决?** 确保未在编译命令中直接包含头文件(.h),这会导致冲突(如引用[3]所示)。使用`-I`指定头文件路径,例如: ```bash qmake && make -I/path/to/headers # 正确方式 ``` - **系统兼容性**:如果使用较旧Qt版本(如Qt5),确认系统库版本兼容。必要时升级Qt或OpenGL驱动。 通过以上步骤,大多数`cannot find -lgl`错误可被解决。如果问题持续,请提供更多细节(如Qt版本、系统日志)以便进一步诊断[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值