wsl2中安装QGC

1.问题描述

root@LQ:/home/packages# ./QGroundControl.AppImage 
/tmp/.mount_QGrounY4TbnX/QGroundControl: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not 
found (required by /tmp/.mount_QGrounY4TbnX/QGroundControl)

2.查找解决方案

1)采用该链接的方案下载编译glibc-2.29:linux下编译安装glibc_没有开花的树-CSDN博客

$ wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz
$ tar -zxf glibc-2.19.tar.gz
$ mkdir glibc-build
$ cd glibc-build
$ ../glibc-2.29/configure --prefix=/usr/lib/glibc-2.29
$ make
$ make install

2)下载编译了glibc-2.29还是不行,继续查找,找到该链接:

wkhtmltopdf: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by wkhtmltopd_maintain 的博客-CSDN博客

使用命令 strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ 可以查看 /lib/x86_64-linux-gnu/libm.so.6 这个文件支持的glibc的版本。发现当前并不支持 GLIBC_2.29 ,当前的系统是ubuntu 18.04。

root@LQ:/usr/local/glibc-2.29/libio# strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ 
GLIBC_2.2.5
GLIBC_2.4
GLIBC_2.15
GLIBC_2.18
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_PRIVATE

继续上外网找,找到如下:How install GLIBC 2.29 or higher in Ubuntu 18.04 | DigitalOcean

wsl2中安装QGC_第1张图片

至此,我还不知道该怎样更方便的解决,毕竟我不想换系统,记录一下,后续解决了再来编辑。有大佬知道也可以直接告诉我,感谢!

继续查找,终于找到方案了:

ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘ not found_gcyysh1314的博客-CSDN博客

 结合前面的大佬的博客,我在configure时:

$ cd glibc-build
$ ../glibc-2.29/configure --prefix=/usr/lib/glibc-2.29
$ make -j8
$ make install

建立软连接

#ll查看下libm.so.6连接情况
#建立软链接
ln -s /usr/lib/glibc-2.29/lib/libm-2.29.so libm.so.6

会报错 ln: failed to create symbolic link ‘libm.so.6’: File exists
此时需要强链接

ln -sf /usr/lib/glibc-2.29/lib/libm-2.29.so libm.so.6
#普通用户可以加上sudo
#目前我每次链接后下次再使用还得重新链接,暂时不知道咋办

最后,用strings /lib/x86_64-linux-gnu/libm.so.6 |grep GLIBC_2.29命令查看即可:

root@LQ:/home/packages# strings /lib/x86_64-linux-gnu/libm.so.6 |grep GLIBC_2.29
GLIBC_2.29
exp2@@GLIBC_2.29
log2@@GLIBC_2.29
pow@@GLIBC_2.29
log@@GLIBC_2.29
exp@@GLIBC_2.29

 3.安装qt

QGC的运行依赖qt,所以必须先安装qt,我选择了最新稳定版5.15.2。qt的安装教程可以参考这篇博客:Ubuntu18.04安装配置Qt5.15_sz590的专栏-CSDN博客

这是我安装时选择的组件,看个人开发需要:

wsl2中安装QGC_第2张图片

组件                   说明
Desktop gcc 64-bit    桌面版 GCC 64bit编译环境生成的Qt库,是Qt的核心,必须安装
WebAssembly           一种加载效率高的语言,适合编译到Web上
Android               针对安卓应用开发的Qt库
Sources               Qt的源代码包
Qt Charts             二维图表模块
Qt Quick 3D           为Qt6开发的新的高级3D API
Qt DataVisualization  三维数据图表模块
Qt Lottie Animation   Lottie动画
Qt Purchasing         使 Qt 应用程序能够支持应用内购买
Qt Virtual Keyboard   虚拟键盘
Qt Wayland Compositor 用于基于Wayland 协议开发自定义显示服务器
Qt WebEngine          Qt Web引擎
Qt Network Authorization    网络授权
Qt WebGL Streaming Plugin   流媒体插件
Qt Script (Deprecated)      脚本模块,已被弃用
Qt Debug Information Files  跟踪调试Qt文件
Qt Quick Timeline           支持基于关键帧的动画

接下来,重点说一下在安装qt时遇到的问题:

1)qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin xcb in even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: minimal, xcb.

解决方法:①首先检查自己的系统中是否缺少 libxcb-xinerama0,如果缺少就执行这个来安装:

$ sudo apt install libxcb-xinerama0

 ②如果你已经安装了上述库,还是有问题,在终端执行:

export QT_DEBUG_PLUGINS=1
#然后再安装qt,看下具体报错信息

我的报错信息如下:QFactoryLoader::QFactoryLoader() ignoring "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3" since plugins are disabled in static builds。

网上搜索没有搜到答案,经过思索和查找,想到qt安装时会弹出安装界面,另外有大佬说这是在树莓派上安装常出现的问题,结合wsl并没有图形界面,于是乎我开始去搜索wsl中安装图形界面的教程,搜到了很多不错的,这里放1个比较好的链接:1)WSL2中使用VcXsrv实现xfce4图形界面+声音传输 - 知乎;

在参考这个链接的时候我犯了一些错误,导致折腾了半天,毕竟linux研究的比较少。

正确的配置姿势

# 首先需要查看Windows系统和WSL2通信使用的虚拟网卡地址
$ sudo vim /etc/resolv.conf
# nameserver后面的地址就是Windows系统虚拟网卡的地址,记一下,同时需要取消下面两行内容的注释,禁用自动重新生成配置文件,否则重启后这个地址会变
[network]
generateResolvConf = false


$ vim ~/.bashrc
# 在文件最后追加下面内容,地址使用上面查看到的
export DISPLAY=192.168.112.1:0

事实上我的系统中,这个地方我不能像他说的一样直接在resolv.conf中注释这些,我的系统中是这样说的:

# This file was automatically generated by WSL. To stop automatic generation of this file, add the 
following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.24.144.1

如果我注释了,关闭了wsl再打开的时候还是这个样子,因为它会自动生成。所以你得按照它的提示:To stop automatic generation of this file, add the following entry to /etc/wsl.conf。所以我创建了wsl.conf,但是创建完后我没有添加正确的写法,这个地方导致我卡了很久。你要添加的内容就是:

# [network]
# generateResolvConf = false

特别注意:我第一次添加的时候把注释去掉了,实际上你不应该注释掉。如果你注释掉了,你重启wsl后,你会发现你的系统中resolv.conf文件没有了,而且你想往里面写东西的时候,没法写!这个时候你需要去把wsl.conf中注释起来,然后再重启wsl就可以看到自动生成了新的resolv.conf。

最终,我在终端启动:startxfce4,运行成功,界面如下:

wsl2中安装QGC_第3张图片

 在使用xfce桌面安装过程,遇到问题后,尝试了通过远程桌面的方式,参考了如下链接:

Win10子系统安装图形化界面的两种方法;WSL2使用xrdp实现图形桌面 - 知乎

 不过最后我还是没有成功,报错和这篇博客类似,即便我按照他的方法重启了电脑还是不行:Windows10访问Ubuntu子系统(WSL)的桌面环境_CodeMan-CSDN博客

 qt的卸载参考这篇博客:Ubuntu下卸载Qt_Y_Hungry的博客-CSDN博客_ubuntu卸载qt

#命令行方式
sudo apt-get remove qt5-default qtcreator

当你在xfce4桌面中运行qt会发现是英文版的,你在tools选项中切换成中文的会发现是乱码的。英文版版本默认是没有中文字库的,所以会出现浏览器,终端等出现中文乱码,解决办法如下:

sudo apt install ttf-wqy-zenhei

4.运行QGC

sudo ./QGroundControl.AppImage 

 遇到的问题:

1)error while loading shared libraries: libgstgl-1.0.so.0: cannot open shared object file: No such file or directory

解决方法

sudo apt install gstreamer1.0-gl

 参考链接:https://github.com/mavlink/qgroundcontrol/issues/8725

 2)/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found

 参考链接:/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found_hellochenlian的专栏-CSDN博客

sudo apt-get install software-properties-common 
sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt update 
sudo apt install gcc-9 
sudo apt-get install libstdc++6

5.遇到的其它问题

1)QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root‘

#在/etc/profile末尾增加两句
export XDG_RUNTIME_DIR=/usr/lib/ #a specific directory you specify 
export RUNLEVEL=3

source /etc/profile

#https://stackoverflow.com/questions/59790350/qstandardpaths-xdg-runtime-dir-not-set-defaulting-to-tmp-runtime-aadithyasb

这个好像无关紧要,我报这个问题依然可以安装。

 2) ./qt-unified-linux-x64-3.2.3-online.run: error while loading shared libraries: libxkbcommon-x11.so.0: cannot open shared object file: No such file or directory.

解决方案

手动安装libxkbcommon-x11.so.0库即可。
在这里提供ubuntu系统对应的安装指令: sudo apt-get install libxkbcommon-x11-0.

参考链接:qt5解决This application failed to start because it could not find or load the Qt platform plugin "xc_CapsulE 的博客-CSDN博客_libxkbcommon-x11.so.0

如果你已经安装了该库,还是有这个问题,参考这个链接:错误"error while loading shared libraries: xxx.so.x" 的原因和解决办法_li27z的博客-CSDN博客

3)qt.qpa.plugin:Could not load the Qt platform plugin “xcb“问题

参考链接:https://www.jb51.net/article/193024.htm

在打印的错误信息的最下面,找到了引发错误的真正原因:

wsl2中安装QGC_第4张图片

也就是Qt动态链接库的问题,当加载libqxcb.so库的时候,还需要加载libxcb-xinerama库。
切换到报错libxcb.so所在目录:

#替换为自己的报错目录
$ cd ~/Qt/Tools/QtCreator/lib/Qt/plugins/platforms$ 

运行ldd libqxcb.so,查看关联内容:ldd libqxcb.so。在linux中, ldd是list dynamic dependencies的缩写, 意思是, 列出动态库依赖关系。

发现不存在的库,如下(每个人的可能不一样):

然后缺什么就安装什么就好,我安装完后就可以正常启动qt了。

wsl2中安装QGC_第5张图片

4)启动qgc提示second instance的问题

ps -ef #查看系统中运行的进程
kill -9 PID # PID为相关的QGC进程

5)qrc:/qml/QGroundControl/FlightMap/QGCVideoBackground.qml:19 module "org.freedesktop.gstreamer.GLVideoItem" is not installed

这个我自己瞎尝试的,安装了:gstreamer1.0-plugins-good和gstreamer1.0-qt5。安装完后qgc可以运行了。可能还有些小问题,后续再继续添加!

备注:有时候安装某个库时tab无法提示时,可以先update一下!另外,你的make和cmake也得先安装好!

以上就是整个安装历程,花了我大半天的时间,最终还是搞定了,感谢那么多大佬分享自己的博客,这也是我开始写博客记录分享的原因,另外我尽量不写别人已经写过的,只写自己的和别人虽然写过但是又很重要的点!

如果文章对你有帮助,还请给小弟一点鼓励---点个赞,感谢各位!

你可能感兴趣的:(PX4,linux)