QT编译环境配置,以及开发板移植的问题

2023-11-20

一、QT编译环境的设置

        编译环境的配置,这个是真个系统构建的时候配置的问题,比较麻烦,后面在补这部分的知识。

        韦东山的开发板和乌班图的编译工具链里面是具有qt的编译工具链的,自己看的是正点原子的视频,所以按照正点正点原子的编译工具进行配置的(具体的配置方法可以看正点原子的视频),设置的不同的项目的QT页面,需要使用的链接库也是不同的,所以新产生的QT项目的显示,需要添加新的库。

注意:添加库的时候,要使用“file”命令查看链接库指向的链接库,两个库都需要拷贝到板子上的“/lib”目录下面,如果只拷贝了原本的库,没有拷贝原本库指向的库,那么运行的时候,还是会报错说找不到这个链接库。

注意:拷贝的库要是显示不能识别,就说明库本身编译的平台不是ARM平台,而是X86的平台,重这时候就需要回去配置环境,从新编译,然后从新拷贝。

 注意:自己后来编译的正点原子的库和韦东山编译器里面的库是不同的版本,是不能混淆在一起使用的,混在一起就会报错存在不同版本的链接库。

 二、QT调试的技巧

        有时候QT调试的时候,报错的信息不全,很多细节的错误都不能显示出来,所以打开QT的错误提示信息是非常重要的,操作如下:

1、打开开发板的配置信息:

vi /etc/profile

2、在上面打开的环境配置文件里面添加下面的环境配置信息,打开QT的详细报错:

export QT_DEBUG_PLUGINS=1

3、然后对开发板重启

reboot

        上面的操作都完成之后,在运行QT程序的时候,就会对错误信息详细的打印出来。

三、触摸屏没有用的问题

        触摸屏没有用,但是接上鼠标之后是可以操作按钮的,这就说明QT的按键输入是没有问题的,但是触摸屏tslab没有启动,这时候就需要对开发板的环境信息进行配置。

        触摸屏没有作用的问题已经解决,最终发现是环境变量的配置的问题,有些环境变量没有进进行配置。

        在上面的问题都解决了之后,发现在lcd上可以显示QT的页面,但是tslab的触摸屏不能使用,如下面代码所示,打开环境信息配置文件,对环境信息做下面的改变。

vi /etc/profile
#qt
export QT_ROOT=/usr/lib/qt
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMTERS=/dev/input/event1
export QT_QPA_FONTDIR=/usr/share/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_FB_TSLIB=1
export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
export QT_QPA_EGLFS_TSLIB=1
export XDG_RUNTIME_DIR=/usr/lib/a
export RUNLEVEL=3


#tslib
export TSLIB_ROOT=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1 
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_PRELOAD=/usr/lib/libts.so

下面两两行增加的作用:
        QT_QPA_GENERIC_PLUGINS=evdev:/dev/input/event1
        QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1
添加了这么两条就能成功,是因为不添加这两行就使用了Qt默认基于libinput插件(这时候会发现鼠标是可以使用的),没有使用到tslib库,添加上面两句之后,就可以使用触摸屏啦啦啦,开森。

四、虚拟机以及镜像系统的安装

(1)虚拟机VMare的安装

就是普通的软件安装,去软件管家找软件就可以。

(2)ubntu镜像系统的安装

下面是国内镜像系统的安装:

转自:ubuntu 16.04 镜像下载

转载备份一下,网友评论说浙大最快。

官方下载地址(不推荐)

Get Ubuntu | Download | Ubuntu

中科大源 

Index of /ubuntu-releases/16.04/

阿里云开源镜像站

ubuntu-releases-16.04安装包下载_开源镜像站-阿里云

兰州大学开源镜像站

Index of /ubuntu-releases/16.04/

北京理工大学开源

http://mirror.bit.edu.cn/ubuntu-releases/16.04/

浙江大学

Index of /ubuntu-releases/16.04/

不知名镜像网站

Index of /releases/xenial

各个版本下载网址:

mirrors.melbourne.co.uk

五、交叉编译工作链

(1)交叉编译工具链各种版本的安装

Linaro Releases

1.arm-none-linux-gnueabi-gcc下载
VeryArm.com is for sale | HugeDomains

        arm-none-linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。使用时,按照主机平台,可以下载以下任一版本中的一个,结果是一样的。

2.arm-none-linux-gnueabi交叉工具链与arm-linux-gcc 有区别吗?
http://bdbaishitong.blog.163.com/blog/static/201493080201332094320957/

eabi标准的要好些,可能arm-linux-gcc就是arm-none-linux-gnueabi的一个链接

终于,郁闷已久的问题攻破了,用了三种配置交叉编译的方法,最终在开发板上实现成功了,现在想一想,有的时候真的也是运气。

(2)交叉编译工具的安装

1、下载交叉编译的安装包

        例如:arm-linux-4.2.1.tar.gz

2、将文件拷贝到“/opt”和“/usr/local”文件夹下

        将复制到这两个问价夹下的问价解压。

3、对“/etc/profile”文件的环境修改

        添加export PATH = /usr/local/arm-linux-4.2.1.tar.gz/bin

4、使用source指令让环境变量起效

        source  /etc/profile

5、如果上边报错就说明缺少32位库兼容包

        sudo apt-get install lib32ncurses5 lib32z1

六、构建文件系统

        可以参考讯为的课程:制作一个最简单的QT界面_哔哩哔哩_bilibili

里面后见文件系统之后,按照韦东山的烧录方式,需要.img镜像文件才可以,生成镜像文件可以参考文章:(100条消息) 打包开发板根文件系统,并制作成img镜像_歌舞丶升平的博客-CSDN博客        上面这部分自己还没有完全实现,后面在搞。

构建的最小系统的文件作用:

        使用“dd”命令的就是可以生成镜像文件。

七、qmake的使用

        “qmake”对QT的项目进行编译,

使用正点的编译的时候,需要source 一下,让qmake环境起作用。

韦东山的也需要,但是还没找到文件的位置。

八、构建内核、设备树

(1) 首先去u-boot官网去下载uboot的源码,链接如下:

Index of /pub/u-boot/ (denx.de)

U-boot 官网:
https://www.denx.de/wiki/U-Boot
源码下载页面:
http://ftp.denx.de/pub/u-boot/
NXP 官方 uboot 源码 Git 地址:
https://source.codeaurora.org/external/imx/uboot-imx
本开发使用的 U-boot 位于 Git 仓库,地址为:
https://e.coding.net/weidongshan/imx-uboot2017.03.git

(2)下载好时候,解压之后,就可以执行下面的命令进行解压:

进入解压好的目录下执行:
make distclean
make mx6ull_14x14_evk_defconfig
make

之后就可以得到:

然后就可以将上面的img镜像文件烧到板子上,但是不能直接使用,需要修改,这部分还不会。 

九、QT的移植

        这部分参考讯为的视频:QT系统移植之在开发板上部署QT运行环境_哔哩哔哩_bilibili

QT的移植包括两部分:QT源码的编译tslib源码的编译

之前的准备环节 :乌班图的安装编译器的安装(这两个前面去已经阐述过)

(1)tslib的下载和编译

        正点的git的地址: https://github.com/kergoth/tslib

         下载好之后,将文件解压到一个文件夹之后,使用万能命令获得Makefile文件。使用万能命令之前可能需要安装下面的软件, 防止编译 tslib 过程中出错
 
sudo apt-get update
sudo apt-get install autoconf automake libtool

对环境变量进行配置(如果已经修改了环境文件,就不需要在进行配置)

平台
export ARCH=arm
交叉编译命令,可以根据自己的进行配置
export CROSS_COMPILE=arm-linux-gnueabihf-
交叉编译命令安装的位置,精确的指令的bin目录下
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x
86_64_arm-linux-gnueabihf/bin
首先创建一个 tslib 文件夹,用于存放编译结果,比如文件路径为:
/home/topeet/driver/imx6ull/43touchscreen/tslib
拷贝 tslib 源码压缩包到 /home/topeet/driver/imx6ull/43touchscreen/ 目录下并解压,如下图所示:
cd tslib-1.21/ //进入 tslib 源码目录
如果没有这个目录就创建一个:/opt/tslib.1.4
./configure --host=arm-linux-gnueabihf --prefix=/opt/tslib.1.4
make
如果没有tmp,就自己创建一个
make install DESTDIR=$PWD/tmp
注意, 在使用 ./configure 配置 tslib 的时候
“--host” 参数指定编译器,指定的编译器要和编译文件统使用同一个编译器,否则在开发板下不能正常使用。
“--prefix” 参数指定编译完成以后的 tslib 文件安装 到哪里,这里肯定是安装到我们刚刚创建的“tslib” 目录下。
修改安装路径下的ts.conf文件:

 也可以参照韦东山的修改方式。

将编译好的文件拷贝到开发板板山,将产生的lib链接库和include头文件拷贝到自己自己工具链里面。
使用下面命令查看自己交叉编译工具链的位置:
echo 'main(){}'| arm-linux-gnueabihf-gcc -E -v -
        然后将安装路径下tslib 目录下的所有文件拷贝到开发板的opt文件里面。如果直接拷贝的话会出现符号链接文件 不能拷贝的现象, 可以先使用 tar 命令进行打包,然后解压到根文件系统下。

(2)QT的下载与编译

QT源码的下载位置:http://download.qt.io/new_archive/qt/5.7/5.7.1/

        使 用 “ tar -vxf qt-everywhere-opensource-src-5.7.0 ” 命 令 解 压 Qt5.7 源 码 , 并 进 入 解 压 生 成 的 “qt-everywhere-opensource-src-5.7.0 ”目录。
        
        在 qt-everywhere-opensource-src-5.7.0 目录下,打开 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 文件,并修改为如下所示内容 ,因为一会我们要用到这个里面的内容,所以我们要先修改一下这里面的编译器。修改完成如下:
# 修改了下面中文注释的两处#
qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib

#添加了下面的几行
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf

#根据自己的编译工具链修改下面的工具链名字
QMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip
load(qt_config)
        然后我们需要用 configure 生成下 Makefile ,因为命令比较长,我们一般都是创建一个脚本,然后执行我们这个脚本生成 Makefile 。 使用“vi autoconfigure.sh” 命令,新建 “autoconfigure.sh” 脚本。脚本内容如下所示。
#!/bin/sh
./configure \
-v \                                 #配置期间输出详细的信息
-prefix /opt/qt5.7.0                 #安装的路径
-release \                           #关闭调试版本的QT
-opensource \                        #构建QT的开源系统
-make libs \                         #make是要添加的组件
-xplatform linux-arm-gnueabi-g++ \   #上面产生的qt编译器,在这里指定
-optimized-qmake \                   #在调试版本中构建优化主机的工具
-pch \                               #使用预编译的头文件
-qt-sql-sqlite \                     #下面都是使用qt自带的库,如sql-sqlite
-qt-libjpeg \
-qt-zlib \
-no-opengl \                         #不使用qt自带的库opengl
-skip qt3d \                         #跳过qt3d
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \                           #不使用这个指令
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \                   #不生成历程的代码
-nomake tools \                      #不生成工具
-skip qtvirtualkeyboard \            #跳过虚拟键盘
-I/opt/tslib1.4/include \            #指定tslib触摸的头文件
-L/opt/tslib1.4/lib                  #指定tslib触摸的库
exit

执行下面的指令进行安装:

./autoconfigure.sh
make
make install

(3)在开发板上部署QT和tslib的环境

        将上面tslib和qt安装路径下的文件全部拷贝到开发板的"/opt"目录下。

        修改根文件系统下的配置文件“/etc/profile”文件添加一下内容:(也可以创建两个脚本文件“.sh”,将这两个脚本文件名字添加到/etc/profile中)

EVENT=$(cat /proc/bus/input/devices | grep -E 'TSC2007|ft5x0x_ts|goodix-ts' -A4 | tail -n1 | awk '{print$NF}')


export TSLIB_ROOT=/opt/tslib1.4
export TSLIB_TSDEVICE=/dev/input/$EVENT
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export QT_ROOT=/opt/qt5.7.0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib/
下面是每行的解释:
自动获取触摸的设备节点,变量 EVENT 的值可能是 event0 event2....... 等。
EVENT=$(cat /proc/bus/input/devices | grep -E 'TSC2007|ft5x0x_ts|goodix-ts' -A4 | tail -n1 | awk '{print$NF}')
触摸库所在的位置
export TSLIB_ROOT=/opt/tslib1.4
触摸屏设备文件
export TSLIB_TSDEVICE=/dev/input/$EVENT
tslib 模块配置文件
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
指定触摸屏校准文件 pintercal 的存放位置
export TSLIB_CALIBFILE=/etc/pointercal
设定控制台设备为 none ,否则默认为 /dev/tty ,这样可以避免出现 “ open consoledevice: No such file
or directory KDSETMODE: Bad file descriptor ” 的错误
export TSLIB_CONSOLEDEVICE=none
qt 库所在的路径
export QT_ROOT=/opt/qt5.7.0
qt 字库的目录
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
qt 插件的目录
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
指定帧缓冲设备 /dev/fb0
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
添加 QT 和触摸库的环境变量,根据自己拷贝的文件夹进行设置。
export LD_LIBRARY_PATH= /lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib/

        把视频所在目录下的字库文件拷贝到根文件系统的 qt 库的/lib/fonts 下,没有这个路径手动创建一个路径。(字库我这里还没有,用的时候自己找“wenquanyi.ttf”)

        然后我们回到根文件系统的 lib 目录下,将视频目录下的 libstdc.tar.gz 拷贝到 lib 解压,并输入命令:(libstdc.tar.gz 这里也没有,用的时候自己找)

ln -s libstdc++.so.6.0.19 libstdc++.so.6

到此QT的移植就结束啦啦啦啦啦啦啦啦啦,真jiba繁琐。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT编译环境配置,以及开发板移植的问题 的相关文章

  • QMetaObject::invokeMethod 在以下情况下不起作用:

    从静态类和非主线程调用 简而言之 我有一个类 sapp 它有另一个静态类 tobj 作为静态成员 为了避免静态顺序初始化失败 tobj 在 sapp 的方法中声明 该方法又返回 tobj 实例的指针 我的问题是 tobj 有一个计时器 应该
  • QOpenGLFunctions 缺少重要的 OpenGL 函数

    QOpenGLFunctions 似乎缺少重要的函数 例如 glInvalidateFramebuffer 和 glMapBuffer 据我了解 QOpenGLFunctions 加载桌面 OpenGL 函数和 ES 函数的交集 如果是这样
  • Qt5 CMake 将所有库包含到可执行文件中

    我正在尝试使用 Qt 5 14 构建一个发布模式下的应用程序 并且 Qt Creator 内部一切正常 但是当我尝试单独运行可执行文件时 我收到如下错误 OS Windows 10 Qt 5 14 Cmake 3 5 我尝试过的 设置 CM
  • 如何使小部件溢出以使滚动条出现在 Qt 中?

    我的小部件的结构是 QWidget 定制为带有圆角边框的面板 要在边界内包含一个带有滚动条并带有边距的区域 然后我将其放入其中 QScrollArea 与 QVBoxLayout 垂直添加内容 然后我在其中添加一系列 标题间距为 0 的 Q
  • 从 Qt 中的半透明小部件中擦除绘制区域

    我面临着必须擦除 Qt 小部件上先前绘制的区域的问题 基本思想是 用户通过单击并拖动鼠标来选择屏幕的一个区域 并在所选区域上绘制一个矩形 标题 class ClearBack public QWidget Q OBJECT public e
  • QWebView / Qt WebKit 不会打开某些 SSL 页面;不允许重定向?

    在带有 Visual C 2008 SP1 的 Windows 7 上全新安装 Qt SDK 1 1 4 我正在使用 Qt Creator 为什么此代码无法加载某些网页 include
  • 包装 C++ Qt 小部件以便在 Python 中与 PySide 一起使用

    在 Python 中使用自定义 Qt 显示小部件包装自定义 C 库以便在基于 PySide 的 QApplication 中使用的最佳方法是什么 C 库是否需要特殊处理才能使用 SWIG 进行包装 封装的 Qt 小部件能否与 PySide
  • 来自无符号字符缓冲区的 QImage(jpg 格式)

    我有类型的缓冲区unsigned char 我用JPG图像填充 我想使用此缓冲区将图像绘制到 QLabel 中的应用程序屏幕上 我已经这样做了 但图像不正确 谁能告诉我最好的方法是什么 QPixmap pix QPixmap fromIma
  • Qt 对象的生命周期

    Qt 对象的生命周期是多少 Such as QTcpSocket socket new QTcpSocket 套接字什么时候会被销毁 我应该使用 delete socket 有什么区别吗 QTcpSocket socket 我找不到有关此的
  • 无法隐藏 QMenu 对象 QMenu::setVisible()?

    我已经建立了一个QMenu MainMenu在我的上面MainWindow在我的应用程序中 大家都习惯了 我有以下QMenu主菜单 文件 编辑 SuperHeavyExpertMenus 设置 帮助 我想隐藏子树SuperHeaverExp
  • 如何在点击 Qtablewidget 单元格时获取放置在该单元格中的小部件的行号?

    我正在尝试的是当用户选择项目时获取 QcomboBox 的行号 虽然使用它很容易获得单元格的列和行 cellClicked int int 信号 但仅当单元格上没有小部件时才有效 那么如果单元格中放置了小部件 如何获取行号 Note 所有组
  • 如何管理返回到 QML 的动态分配的 QObject 的生命周期?

    我有这个代码 QVariant componentFromCode QString code QQmlComponent component new QQmlComponent engine engine gt setObjectOwner
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • 如何找到 QDockWidget 标题栏的高度?

    我正在尝试找到 a 的高度QDockWidget标题栏 以便对自定义布局进行一些智能调整大小 但标题栏不是单独的小部件 它内置于停靠小部件的私有布局中 并且没有成员可以访问它 还有其他方法可以找到它的高度吗 是的 您可以使用以下命令找到标题
  • 什么时候应该首选 Loader 而不是 createQmlObject,反之亦然 - QML?

    两者都可以动态创建对象 什么时候应该Loader优先于Qt createQmlObjectQML 中反之亦然吗 The Loader可以被视为特定对象的占位符 它还使您能够通过Loader s id Qt createQmlObject通常
  • Qt 远程文件浏览器

    我想知道是否有人使用过 Qt 远程文件浏览器 根据我的理解 我有两个选择 当涉及到远程文件时 将 QFileDilaog 与自定义代理模型结合使用 该模型将负责提供远程文件 目录结构 使用自定义对话框 并为本地文件提供标准文件系统模型 为远
  • QT 应用程序运行时错误?

    我已经在 Windows 7 的 Qt5 1 上开发了一个应用程序 现在我想分发它 由于我使用了 MINGW 编译器 因此无法静态构建它 我使用dependency walker找出所有dll并打包 当我在未安装 QT 开发环境的计算机上运
  • 我的 QSqlQueryModel 不在列表视图中显示数据

    我正在玩 QSqlQueryModel 但我现在完全陷入困境 我一整天都在寻找解决方案 但到目前为止还没有运气 我所做的工作是它从我的 sqlite 数据库中提取数据 但由于某种原因我无法在列表视图中显示它 我的角色名似乎不存在 对于我从数
  • 对齐坐标系

    Let s say I have 2 coordinate systems as it is shown in image attached 如何对齐这个坐标系 我知道我需要将第二个坐标系围绕 X 平移 180 度 然后将其平移到第一个坐标
  • 调整 QML 图像显示尺寸

    我有一个带有嵌套的 QML 窗口RowLayout 在内排我有两个图像 来源 png这些图像的文件 故意 相当大 当我尝试设置height这些图像上的属性使它们变小 但它们仍然被画得很大 Desired Appearance Actual

随机推荐

  • Qt数据类型与强制转换(转)

    类型转换 把QString转换为 double类型 方法1 QString str 123 45 double val str toDouble val 123 45 方法2 很适合科学计数法形式转换 bool ok double d d
  • java源文件命名规则

    Java程序源文件的命名不是随意的 Java文件的命名必须满足如下规则 Java程序源文件的扩展名必须是 java 不能是其他文件扩展名 在通常情况下 Java程序源文件的主文件名可以是任意的 但有一种情况例外 如果Java程序源代码里定义
  • SpringMVC加载流程

    这节介绍SpringMVC SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架 本章会介绍相关概念 流程 再从源码进行讲解 1 MVC MVC Model View Controller 是一种软件设计
  • Zookeeper(三)—分布式锁实现

    一 独占锁原理 独占锁是利用zk同一目录下不能创建多个相同名称的节点这个特性 来实现分布式锁的功能 竞争锁的分布式系统 都在zk根目录下创建一个名为lock的节点 创建节点成功的系统 说明抢到了这把锁 没有创建成功的系统 说明这个节点已经被
  • 星星之火-22: 什么是手机小区重选?跳槽

    小区重选 cell reselection 指手机在空闲模式下 通过监测邻区和当前小区的信号质量以选择一个最好的小区提供服务信号的过程 选择了一家新公司 并不意味着永久待在一家公司 当前服务的公司 有可能由于经营状况变变糟 薪资水平下降 也
  • 【树莓派4B】darknet-nnpack的安装及使用

    文章目录 前言 步骤 1 下载依赖项 2 安装NNPACK darknet 3 下载darknet nnpack 4 使用YOLO进行预测 检测图像 检测视频 检测视频流 错误处理 make 时报错 undefined reference
  • (二)webpack-server

    宗旨 为了更好的开发和调试 1 package json npm init y 生成package json 2 安装server npm install webpack dev server D 3 修改配置 在package json文
  • canvas绘制一个圆分成六等分颜色随机

  • 基于FPGA的AHT10传感器温湿度读取

    文章目录 一 系统框架 二 i2c接口 三 i2c控制模块 状态机设计 状态转移图 START INIT CHECK INIT IDLE TRIGGER WAIT READ 代码 四 数据处理模块 串口 代码 五 仿真 testbench设
  • vue:实现锚点双向滚动/文章章节联动滚动效果

    文章目录 需求描述 实现思路 示例代码 参考网址 需求描述 需要实现类似doc中文档大纲的效果 点击对应章节的名称时定位到相应的正文 而当正文滚动时 高亮显示对应的章节名称 实现思路 其实笔者一开始想到的是利用a标签页内跳转 也就是 锚点
  • pandas学习笔记--增加行或列

    一 增加行 1 loc 想增加一行 行名称为 5 内容为 16 17 18 19 df loc 5 16 17 18 19 后面的序列是Iterable就行 2 at df at 5 16 17 18 19 3 set value df s
  • CTFShow web1-7——CTF秀WEB模块解题思路

    CTFShow WEB模块详细通关教程 受篇幅所限 通关教程分为上下两部分 第一部分为1 7关 第二部分为8 14关 本篇博客为1 7关的通关教程 从解题思路和原理剖析两个方面进行讲解 CTFShow web1 7关详细教程 解题思路 CT
  • 架构师必备技能之——MySQL数据库表设计

    好记忆不如烂笔头 能记下点东西 就记下点 有时间拿出来看看 也会发觉不一样的感受 目录 一 总体设计思想 二 字段相关设计原则 三 索引设计原则 四 SQL操作原则 五 其他原则 一 总体设计思想 1 不要在数据库做运算符操作 数据库服务器
  • FastJSON、Jackson、Gson性能测试

    起因是公司原先用的是阿里开源的FastJSON 大家用的也比较顺手 但是在出现了两次严重的漏洞后 公司决定放弃FastJSON 使用其他序列化 反序列化工具 考虑大家常用的无非就是FastJSON Jackson和Gson这三种 因此领导让
  • MyBatis 中如何使用多表查询

    MyBatis 中如何使用多表查询 MyBatis 是一款优秀的 ORM 框架 支持多表查询操作 在实际开发中 经常需要使用多表查询来获取业务数据 本文将介绍 MyBatis 中如何使用多表查询 包括使用嵌套查询 使用关联查询和使用动态 S
  • 六种进程间通信方式

    转载 六种进程间通信方式 LceChan的博客 CSDN博客 如何实现进程间通信
  • swiper 轮播 多行多列 横向排列

    一直没仔细研究过swiper 用到了swiper多行多列的展示效果 官网默认是纵向排列 想要做到横向排列 需添加一个一个属性 slidesPerColumnFill row slidesPerView 4 slidesPerColumn 4
  • SpringBoot 统一功能处理

    目录 一 统一用户登录权限验证 Spring 拦截器 统一访问前缀添加 二 统一异常处理 三 统一数据格式返回 String 格式的特殊处理 一 统一用户登录权限验证 在没有统一功能处理之前 对于用户登录权限验证 每个方法都需要单独写用户登
  • 编写函数void fun(int x,int *pp,int *n),它的功能是:求出x的偶数因子,并按从小到大的顺序放在pp所指的数组中,这些因子的个数通过形参n返回(假设pp指向足够大的空间)。

    编写函数void fun int x int pp int n 它的功能是 求出x的偶数因子 并按从小到大的顺序放在pp所指的数组中 这些因子的个数通过形参n返回 假设pp指向足够大的空间 如 当x的值为24 则有6个符合要求分别是2 4
  • QT编译环境配置,以及开发板移植的问题

    一 QT编译环境的设置 编译环境的配置 这个是真个系统构建的时候配置的问题 比较麻烦 后面在补这部分的知识 韦东山的开发板和乌班图的编译工具链里面是具有qt的编译工具链的 自己看的是正点原子的视频 所以按照正点正点原子的编译工具进行配置的