版本记录表

开发环境

  • 编译环境: 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

  1. 在开发板上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_DIRTSLIB_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相关推荐

  1. Ubuntu 20.04 LTS/RTX30XX显卡 快速配置深度学习环境(一行命令)

    近日,新入一台RTX3080的服务器,目前好像还没办法很方便地在 RTX 30 系列 GPU上通过 pip/conda 安装 TensorFlow 或 PyTorch.因为这些 GPU 需要 CUDA ...

  2. 在Ubuntu 20.04 LTS中配置Java开发环境

    下载Java开发工具包jdk jdk的下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/index.html. 点击红色方框中 ...

  3. harfbuzz安装位置 linux_最新Ubuntu 20.04 LTS已发布,在Win10中该如何进行安装和使用?...

    最近Ubuntu发布最新的20.04 LTS长期支持版本,官方提供为期5年的更新升级.安全修复等服务.国内的优麒麟团队也同步放出了优麒麟20.04 LTS,加入了全新的UKUI 3.0桌面环境. 那么 ...

  4. win10应用商店linux,Ubuntu 20.04 LTS已可通过Windows 10应用商店获取

    获取 Ubuntu 20.04 LTS:Microsoft Sotre 传送门 值得一提的是,这也是随附 Fast ID Online(简称 FIDO)的首个 Ubuntu 版本,可方便在操作系统中提 ...

  5. win10家庭版安装VMWare和Ubuntu 20.04 LTS

    ubuntu 20.04.2.0 LTS https://cn.ubuntu.com/download/desktop win 10 家庭版 ##gpedit.msc找不到 创建gpedit.bat, ...

  6. [ 利器篇 ] - 尝试下Ubuntu 20.04 (LTS) Focal Fossa

    目录 apt更换下载源 搜狗输入法 Zsh XMind Install Ventoy 多合一启动盘制作 Shell-Tool SecureCRT apt更换下载源 Ubuntu16.04更换下载源(图 ...

  7. 树莓派配置路由_树莓派安装Ubuntu 20.04 LTS并配置

    昨天是个好日子,我跑在rock 64上的V2Ray服务器配置好了,但是不幸的是大概两个小时后它就死机了,这让我非常的无语.Rock 64配置很高,三年前就有4G内存,USB 3.0的配置,但是最近使用 ...

  8. ubuntu20分区_「图」Canonical希望Ubuntu 20.04 LTS Server Installer更快更舒适

    针对即将到来的Ubuntu 20.04 LTS(Focal Fossa)操作系统,Canonical于今天推出了Ubuntu Server安装器计划.Ubuntu 20.04 LTS操作系统在明年4月 ...

  9. ubuntu 20.04 设置网关_如何把Ubuntu升级到Ubuntu 20.04 LTS 最新版本

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要介绍如何把Ubuntu 旧版本升级到最新的Ub ...

最新文章

  1. java bufferedwriter 写入tab_一个Java程序员的成长历程(014,015)天
  2. php可以实现响应式吗,怎么实现Vue数据响应式
  3. Python 元组 (tuple)
  4. .Net Core 3.1,这匹黑马,2020年值得所有程序员重视!
  5. 微软正式发布Azure IoT Central
  6. access 根据id删除数据_小程序云开发之数据库自动备份丨云开发101
  7. mini车f和r的区别_最大最实用的MINI,最值得买的MINI?
  8. CentOS设置静态IP
  9. YFIOServer后台驱动算法优化
  10. (1)、win10 本地 安装 rabbitmq
  11. 【跃迁之路】【648天】程序员高效学习方法论探索系列(实验阶段405-2018.11.21)...
  12. excel 第六次人口普查_excel 第六次人口普查_第六次全国人口普查表短表
  13. 软件测试术语 - 需求跟踪矩阵
  14. 计算机图形学实验体会,计算机图形学实验报告.doc
  15. python相关性分析模型,相关性分析原理及Python实战
  16. 逻辑运算符,if、swtch语句(java基础知识三)
  17. java 图片切割_使用Java实现图像分割
  18. Microsoft Office for Mac 报错
  19. Cozmo人工智能机器人SDK使用笔记(1)-基础部分basics
  20. 文件新旧判断和字符串判断

热门文章

  1. JavaScript实现按键快速获取输入框光标
  2. 划分微服务边界的5个特征
  3. EXCEL里面数据太多了,打开好慢,怎么办?
  4. 蓝桥 历届试题 格子刷油漆
  5. 企业应该把内部理顺后再考虑上ERP系统
  6. 【一】反转字符串中的元音字母
  7. MarkDown语法汇总及演示
  8. python爬取酒店信息_Python 爬取美團酒店信息
  9. 计算机科学与考研技术专业大学排名,2021考研,计算机科学与技术专业学校排名,共168所!...
  10. kernel32.dll函数介绍