QT4.8.6的交叉编译 - 编译平台:Ubuntu 20.04 LTS,目标平台:linux/imx6ull
版本记录表
开发环境
- 编译环境: 64位Ubuntu 20.04 LTS
- 交叉编译工具链: arm-linux-gnueabihf-GCC 4.9.1
- 本地编译器:gcc version 7.5.0 (Ubuntu 7.5.0-6ubuntu2)
- QT版本: qt-4.8.6
- 硬件平台: i.mx6ull
- 编译所需的包为: ARM-Linux-GCC-4.9.1.tar.bz2, tslib-1.4.tar.gz, qt-everywhere-opensource-src-4.8.6.tar.gz
项目地址(不开源)
Qt-everywhere-opensource源码: Index of /archive
特别说明1
笔者已经在Ubuntu 16.04, 18.04, 20.04三个版本中成功实现Qt的交叉编译,但这并不说明本项目是与Linux版本无关的。目前确定的是本机的gcc/g++编译器版本会影响编辑的结果。例如Ubuntu 20.04LTS系统自带的gcc编译器版本为9.3.0,使用这个版本的编译器是无法完成Qt的交叉编译的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E94k6E09-1626352525518)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/606aa1e6-7812-4244-93f3-631b56261c63/Untitled.png)]
为了解决这个问题,应当安装gcc-7编译器:
sudo apt install gcc-7 g++-7
gcc-7 -v
可以设置系统默认的gcc/g++编译器版本号,也可以在qt源码的mkspecs中更改默认的编译器:QMAKE_CC = gcc-7
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EfN25kxz-1626352525520)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e30e9130-7fb1-4eef-af45-b2e6c0936e5c/Untitled.png)]
特别说明2
在Qt mkspecs中选择合适的平台并修改交叉编译的选项。
- 进入**qt-everywhere-opensource-src-4.8.6/mkspecs/qws/linux-arm-g++**目录
- 修改qmake.conf文件:arm-linux → arm-linux-gnueabihf -lts (-lts是因为使用了tslib库)
- 配置Qt编译选项时,需要使用**-xplatform qws/linux-arm-g++**选项指定我们调整过的mkspecs
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9o8KrPTq-1626352525521)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/54272f33-cd50-44f4-a019-54bce74746ff/Untitled.png)]
如果在后面程序的编译过程中(加载插件、调用动态库)出现了如下类似报错:
The plugin ‘/usr/lib/libEWhalesInputMethodPro.so’ uses incompatible Qt library. Expected build key “arm linux gnueabihf-g++ no-pkg-config”, got “arm linux g++ no-pkg-config”:
则需要检查源码中对QT_BUILD_KEY
的定义,修改qt-everywhere-opensource-src-4.8.6/src/corelib/global/ qglobal.h文件:
- 将
#define QT_BUILD_KEY "arm linux g++ no-pkg-config"
改为#define QT_BUILD_KEY "arm linux gnueabihf-g++ no-pkg-config"
- 将
#define QT_BUILD_KEY_COMPAT3 "armv6 linux g++ no-pkg-config"
改为#define QT_BUILD_KEY_COMPAT3 "armv6 linux gnueabihf-g++ no-pkg-config"
如果已经编译完成,则可以直接修改**<QtCore/qconfig.h>**头文件,修改的内容与上述文件相同。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJs8llPo-1626352525521)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6d93cf2a-676a-406f-b6f0-29b800e918fa/Untitled.png)]
特别说明3
从笔者的交叉笔译实战来看,能解决编译过程中遇到问题的关键在于了解Qt从源代码编译成可以部署到嵌入式系统中的过程。这个过程分为两个核心的部分,分别使用了本地编译器与交叉编译工具链,任何一个环节出错都可能导致最终的编译失败,而且这种出错不一定是显性报错的。举例说明:
进行第一阶段编译时,生成的Qt-tools可执行程序位于bin文件夹。其中,uic程序是用来将页面设计文件(.ui)转化为对应的头文件(.h)。如果本地编译器GCC的版本为V9.3,程序会工作异常,导致页面设计相关的头文件出错,进而使得后续的Qt-opensource源码编译过程出错。如果将编译器版本换成GCC-V7,则uic程序运行正常,Qt源码可以正常编译。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X6EGLVmi-1626352525522)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dae013a7-4095-4bb8-9635-54a9feecb27d/Qt_cross_compile.png)]
快速开始
设置工具链
若采用最新的CrossCompileDev工具包进行开发环境配置,则:
- 进入CrossCompileDev文件夹,修改”. startwork.sh”脚本中的
WORKDIR
路径为当前文件夹的位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CWu4hAwU-1626352525522)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3a36a088-cd74-46e6-82b2-f821a3055875/Untitled.png)]
- 执行”. startwork.sh”脚本快速配置开发环境
. startwork.sh
同时在CrossCompileDev/tools/tslib-1.4中有已经交叉编译好的tslib库,因此步骤1~2可以直接跳过。若直接采用alwhales工业平板电脑进行开发,则关于tslib库和Qt库移植到开发板的步骤(步骤6)可以省略。
最为关键和必不可少的步骤为:3. qt4.8.6的交叉编译, 进入CrossCompileDev/tools/CrossCompileQt /qt-4.8.6-source文件夹中,修改build_arm_qt.sh脚本中开头的两处路径配置,然后直接运行该脚本就可以快速完成Qt的交叉编译与安装。需要特别说明的是,每次的Qt交叉编译工作开始前,请确保Qt源码处于未经配置的原始状态,最简单的做法是删除原来的源码qt-everywhere-opensource-src-4.8.6,然后从原始代码压缩文件中再解压一份。或者进入qt-everywhere-opensource-src-4.8.6文件夹,然后运行make clean
。
一般流程
1. 交叉工具链的安装
将资料包中的4.9.1.tar.bz2解压到/opt/arm-gcc下(目录随自己喜好,本文以此为例),会在/opt/arm-gcc目录下出现目录4.9.1,解压命令如下:
$ sudo tar -jxvf 4.9.1.tar.bz2 -C /opt/arm-gcc/
添加环境变量,在/etc/profile文件的末尾添加
export PATH=$PATH:/opt/arm-gcc/4.9.1/bin
然后命令行使设置立即生效
$ source /etc/profile
可以在命令行敲arm加上tab键,查看环境设置是否生效,如果生效,如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lsv08EtM-1626352525523)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0370b21f-d456-4d0f-8c40-4efff01fb36c/image3.png)]
查看当前的arm-gcc的版本:
$ arm-linux-gcc –v
如果找不到可以:
$arm-linux-gnueabihf -v
如果出现缺少共享库文件,安装即可。
2. ts库的交叉编译
创建工作目录,
$ mkdir /home/alwhales/CrossCompileDev/tslib-1.4 -p
(/home/li/为我的用户主目录)
复制tslib-1.4.tar.gz到此目录:
进入此目录,并解压tslib-1.4.tar.gz,
$ cd /home/alwhales/CrossCompileDev/tslib-1.4
$ tar -zxvf tslib-1.4.tar.gz
进入解压出来的tslib目录,,
$ cd tslib
安装编译所需的一些库,
$ sudo apt-get install autoconf automake libtool
$ sudo apt-get install g++-multilib libx11-dev libxext-dev libxtst-dev zlib1g-dev lib32ncurses5 lib32z1 libpng-dev
设置ts库的存放路径,
$ export PREFIX=/home/alwhales/CrossCompileDev/tools/tslib-1.4/lib-arm
生成configure脚本,
$ ./autogen.sh
清除上次编译信息、屏蔽一些没用的编译错误信息:
make distclean
rm arm-linux.cache
echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache
编译配置:
$ ./configure --host=arm-linux --prefix=$PREFIX --cache-file=arm-linux.cache
开始编译:
$ sudo make
创建一个放置待会编译出来的可移植库的目录lib-arm,这个库会在编译qt的时候用,
$ mkdir lib-arm
安装到/home/li/QT/tslib-1.4/ lib-arm,
$ sudo make install
编译成功后在/home/li/QT/tslib-1.4/lib-arm下产生bin、etc、include、lib 4个文件夹,修改这里的etc/ts.conf,打开之前屏蔽掉的module variance delta=30
然后查看编译器的版本:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1IbgDOV7-1626352525523)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4817dd4c-2c2e-425d-9882-78f919b28371/image4.png)]
此时ts库的编译就完成了,接下来就可以编译qt了,下面说明下如何移植ts库到开发板上。
1 将/home/li/QT/tslib-1.4/lib-arm下的几个文件夹拷贝到arm文件系统的/opt/tslib-1.4
2 设置环境变量脚本tslib.sh,脚本位置在/etc/profile.d/目录下,如下图所示:
#!/bin/sh
TSLIB=/opt/tslib-1.4
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=$TSLIB/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB/lib
export PATH=$PATH:$TSLIB/bin
3 启动arm板,命令行下执行脚本
source tslib.sh
- 在开发板上tslib-1.4/etc目录下的ts.conf的“#module_raw input”的注释去掉,不要留空格。
5 校准触摸屏
cd /opt/tslib-1.4/bin
./ts_calibrate
会出现校准画面,完成后生成pointercal 文件
6 链接
ln -s /opt/tslib/etc/pointercal /etc/pointercal
7 修改配置文件
tslib的配置文件是/opt/tslib-1.4/etc/ts.conf,针对不同的触摸屏可能需要设置不同的配置参数。目前AlWhales联鲸微工业电脑(电容屏)使用的配置如下所示:
# Uncomment if you wish to use the linux input layer event interface
module_raw input# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
# module_raw collie# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
# module_raw corgi# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
# module_raw ucb1x00# Uncomment if you're using an HP iPaq h3600 or similar
# module_raw h3600# Uncomment if you're using a Hitachi Webpad
# module_raw mk712# Uncomment if you're using an IBM Arctic II
# module_raw arctic2module pthres pmin=1
# module variance delta=30
module dejitter delta=100
module linear
3. qt4.8.6的交叉编译
- 创建工作目录
$ mkdir /home/alwhales/CrossCompileDev/qt-4.8.6 –p
- 解压qt-everywhere-opensource-src-4.8.6.tar.gz到该目录下
$ tar -zxvf qt-everywhere-opensource-src-4.8.6.tar.gz -C /home/alwhales/CrossCompileDev/qt-4.8.6
- 拷贝builearm.sh到该目录下,vi编辑器下进行查看并修改
QT_INSTALL_DIR
与TSLIB_DIR
的目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GESsIk4f-1626352525524)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/50b81cd6-bdef-4ea7-bf6b-aa009a281bd0/Untitled.png)]
- 修改完之后,就可以执行builearm脚本了
./builearm.sh
编译时间会很长,等他编译完之后会执行make install
,这里可能会报权限错误,
如果报权限错误,就单独在命令行执行sudo make install
命令就好了,等安装完成之后,会在qt库的存放路径下出现可移植的qt库了。如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7BpjMjz-1626352525524)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2bf101e7-3f7a-4a01-b5ce-778f79f88e97/image7.png)]
移植qt库到开发板上:
1 将/usr/local/Trolltech/QtEmbedded-4.8.6-arm下的文件拷贝到开发板的/opt/qt-4.8.6/下,
2 编写qt.sh,此脚本在/etc/profile.d/目录下,内容如下图所示,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MmypVzT0-1626352525526)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1d0343f0-872d-4325-b1e8-540c7e88f0c6/image8.png)]
需要说明的是在开发板中运行qt应用程序的时候要加后缀 –qws
。
4. 配置qtcreator的交叉编译工具链
sudo apt-get install qtcreator
打开安装好的qtcreator(可以在ubuntu软件中心下载),点击工具栏的“工具”->“选项”,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iix6Amp4-1626352525526)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a97efcf9-abaf-463c-9e28-a0490cdbfd79/image9.png)]
点击“Qt Versions”按钮,点击此界面的“添加”按钮,在跳出来的对话框中选择编译qt4.8.6时产生的qmake文件,本文的qmake路径为/usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake,视自身设置而定,配置如下图所示,设置完后点击“Apply”按钮,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29eJc65v-1626352525527)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/78b51946-c5ae-41a8-b366-cb1ed272791b/image10.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d4xIDhLU-1626352525527)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7b898936-dc61-4d25-821f-7b3967617366/image11.png)]
点击“编译器”按钮,单击“添加”按钮,选择交叉编译器的g++路径,本文的路径为/opt/arm-gcc/4.9.1/bin/arm-linux-g++,配置如下图所示,配置完成后点击“Apply“按钮,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cxkkv195-1626352525527)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1a23427b-d200-4ed5-8218-359c3429e856/image12.png)]
点击“构建套件”,单击“添加”按钮,之后在“编译器”栏和“Qt版本”栏选择刚才添加的就好了,配置如下图所示,配置完成后点击“Apply”,然后点击“OK”按钮即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9PP85Mv-1626352525527)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c8abac6d-cbdc-4dc5-99ab-b9f9658d14bd/image13.png)]
点击菜单栏上的 Tools Options 进入 Options 窗口,点击左侧 Build & Run ,在右侧出现的窗口中点击 Qt Versions ,设置 Qt 的版本。点击右边的 Add… ,在弹出的窗口中进入到 /opt/qt-4.8.5-sdk/bin ()中,选中qmake ,
然后点击 Open ,如图 6-11 所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSAlFDDl-1626352525528)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d9529049-a149-4bad-a09e-babd53e6d6b6/image14.png)]
图 6-11
然后点击 Apply 。
在 Build & Run 中点击 Compilers ,配置我们所使用的交叉编译器,然后添加交叉编译工具,点击右侧的 Add 在出现的选项中选择 GCC ,点击下面 Compiler path: 右侧的 Browse… 按钮,选中 arm-linux-gnueavihf-gcc ,然后点击 Open 。输入 Name ,例如 arm-linux-gnueabihf-GCC ,然后点击 Apply。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U7MggqEV-1626352525528)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2d1acb93-5e4c-4d36-88d8-4bc190488274/image15.png)]
图 6-13
在 Build & Run 中点击 Debuggers ,配置我们所使用的调试器,点击右侧的 Add ,点击下面 Path: 右侧的 Browse… 按钮,选中 arm-linux-gnueavihf-gdb ,然后点击 Open 。输入 Name ,例如: arm-linux-gnueabihf-gdb Debugger ,然后点击 Apply 。如图 6-21 所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fr0kljpP-1626352525529)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2fac508a-59a3-4d78-b057-f8714eecebf1/image16.png)]
点击左侧 Devices,设置设备参数。点击右侧的 Add ,选中 Generic Linux Device ,
然后点击 Start Wizard ,输入名字,输入设备的 IP 地址,根据设备的实际地址设置,
输入设备的登录名:root ,然后点击 Next 。点击 Finish 完成设备的创建,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FUUcj7N8-1626352525529)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1e55ce5e-0166-4d9a-82c2-25163ab1c725/image17.png)]
5. 使用QT creator开发项目
创建新的项目,Kits选择上面的imx6设备。(注:只能选择一个设备,多选会出错)。
项目编译完成后,点击右侧的Project,点击左侧的 Projects ,选择 Build & Run ,在 imx6 中选择 Build ,在 Build Settings General 中,不要勾选 Shadow build: ,选择 Run ,点击 Method: 右边的 Add ,然后选择 Deploy to Remote Linux Host ,
添加完成之后你还可以在下方看到红色字体的 Remote path not set 错误,这个错误的解决方法是:点击左边的 Edit 并打开 *.pro ,添加以下两行信息:
target.path += /home/root
INSTALLS += target
然后选择 File Save 保存文件,添加之后点击左侧的 Project ,你可以看到红色字体已经消失,被 /home/root/hellomyir 取代。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tsKGOF9e-1626352525529)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4d45191b-970b-4f48-953c-bdab063aa388/image18.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yao1H8x0-1626352525530)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5bff3da4-cb1b-4702-8b4e-cacb260cfa9e/image19.png)]
注:在Arguments 选项后加上:-qws,否则会出错
6. 移植qt库到开发板上
1 将/usr/local/Trolltech/QtEmbedded-4.8.6-arm下的文件拷贝到开发板的/opt/qt-4.8.6/下,
2 编写qt.sh,此脚本在/etc/profile.d/目录下,内容如下图所示,
#!/bin/sh
export QTDIR=/opt/qt-4.8.6
export QWS_MOUSE_PROTO=tslib:/dev/input/event1
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
export QT_QPA_FONTDIR= $QTDIR /lib/fonts
export QT_PLUGIN_PATH= $QTDIR /plugins#export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
#export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
#export LD_LIBRARY_PATH=$LIBRARY_PAH:$QT_LIB
说明:在交叉编译执行之后会在开发板上生成可执行文件,执行时后面加-qws
./hello -qws
7. 其他
安装Qt帮助文档
将qt-everywhere-opensource-src-4.8.6源码中./doc/qch文件夹复制到qt安装目录QtEmbedded-4.8.6-arm下。打开Qt Creator,依次点击Tools,Options,Help,Documentation,点击add,添加QtEmbedded-4.8.6-arm/qch中的文件。
Qt Creator的配置文件
如果出现Qt Creator程序的配置更改不能生效的问题,可能是因为它的配置文件出现了权限问题。Qt Creator的配置文件在/home/tao/.config/QtProject目录下。若删除这个目录下的文件,则Qt Creator会被重置,编译器配置、主题风格、快捷键设置等会全部恢复默认值。若更改这个目录下文件的权限,一般可以解决Qt Creator程序的配置不能生效的问题。同时,如果备份这个文件夹下面的文件,并在再次重装Qt Creator程序时恢复它,可以使程序直接恢复到备份文件所记录的配置状态。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9mL1tXU-1626352525530)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/617336ff-2ebb-4d11-8f30-a1a22c260f36/image20.png)]
QT4.8.6的交叉编译 - 编译平台:Ubuntu 20.04 LTS,目标平台:linux/imx6ull相关推荐
- Ubuntu 20.04 LTS/RTX30XX显卡 快速配置深度学习环境(一行命令)
近日,新入一台RTX3080的服务器,目前好像还没办法很方便地在 RTX 30 系列 GPU上通过 pip/conda 安装 TensorFlow 或 PyTorch.因为这些 GPU 需要 CUDA ...
- 在Ubuntu 20.04 LTS中配置Java开发环境
下载Java开发工具包jdk jdk的下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/index.html. 点击红色方框中 ...
- harfbuzz安装位置 linux_最新Ubuntu 20.04 LTS已发布,在Win10中该如何进行安装和使用?...
最近Ubuntu发布最新的20.04 LTS长期支持版本,官方提供为期5年的更新升级.安全修复等服务.国内的优麒麟团队也同步放出了优麒麟20.04 LTS,加入了全新的UKUI 3.0桌面环境. 那么 ...
- win10应用商店linux,Ubuntu 20.04 LTS已可通过Windows 10应用商店获取
获取 Ubuntu 20.04 LTS:Microsoft Sotre 传送门 值得一提的是,这也是随附 Fast ID Online(简称 FIDO)的首个 Ubuntu 版本,可方便在操作系统中提 ...
- win10家庭版安装VMWare和Ubuntu 20.04 LTS
ubuntu 20.04.2.0 LTS https://cn.ubuntu.com/download/desktop win 10 家庭版 ##gpedit.msc找不到 创建gpedit.bat, ...
- [ 利器篇 ] - 尝试下Ubuntu 20.04 (LTS) Focal Fossa
目录 apt更换下载源 搜狗输入法 Zsh XMind Install Ventoy 多合一启动盘制作 Shell-Tool SecureCRT apt更换下载源 Ubuntu16.04更换下载源(图 ...
- 树莓派配置路由_树莓派安装Ubuntu 20.04 LTS并配置
昨天是个好日子,我跑在rock 64上的V2Ray服务器配置好了,但是不幸的是大概两个小时后它就死机了,这让我非常的无语.Rock 64配置很高,三年前就有4G内存,USB 3.0的配置,但是最近使用 ...
- ubuntu20分区_「图」Canonical希望Ubuntu 20.04 LTS Server Installer更快更舒适
针对即将到来的Ubuntu 20.04 LTS(Focal Fossa)操作系统,Canonical于今天推出了Ubuntu Server安装器计划.Ubuntu 20.04 LTS操作系统在明年4月 ...
- ubuntu 20.04 设置网关_如何把Ubuntu升级到Ubuntu 20.04 LTS 最新版本
请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要介绍如何把Ubuntu 旧版本升级到最新的Ub ...
最新文章
- java bufferedwriter 写入tab_一个Java程序员的成长历程(014,015)天
- php可以实现响应式吗,怎么实现Vue数据响应式
- Python 元组 (tuple)
- .Net Core 3.1,这匹黑马,2020年值得所有程序员重视!
- 微软正式发布Azure IoT Central
- access 根据id删除数据_小程序云开发之数据库自动备份丨云开发101
- mini车f和r的区别_最大最实用的MINI,最值得买的MINI?
- CentOS设置静态IP
- YFIOServer后台驱动算法优化
- (1)、win10 本地 安装 rabbitmq
- 【跃迁之路】【648天】程序员高效学习方法论探索系列(实验阶段405-2018.11.21)...
- excel 第六次人口普查_excel 第六次人口普查_第六次全国人口普查表短表
- 软件测试术语 - 需求跟踪矩阵
- 计算机图形学实验体会,计算机图形学实验报告.doc
- python相关性分析模型,相关性分析原理及Python实战
- 逻辑运算符,if、swtch语句(java基础知识三)
- java 图片切割_使用Java实现图像分割
- Microsoft Office for Mac 报错
- Cozmo人工智能机器人SDK使用笔记(1)-基础部分basics
- 文件新旧判断和字符串判断