飞腾ARM UOS编译Qt 5.15.2源码及Qt Creator
背景
在 ARM 架构下,UOS 系统,需要使用 Qt 5.15.2 版本环境,所以只能通过源码编译的形式进行 Qt 环境的部署。
软硬件相关信息:
- 处理器: 飞腾 FT-2000 4 核
- 制造商: Phytium
- 架构: aarch 64
- 家族: ARMv 8
- 系统:UOS V 20 1060
- 内核:4.19.0-arm 64-desktop
下载 Qt、Qtcreator 源码
这里选择的是国内的镜像地址进行下载源码。
Qt 5.15.2: http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.15/5.15.2/single/
Qt Creator: http://mirrors.ustc.edu.cn/qtproject/archive/qtcreator/
需要注意的是,QtCreator 的版本要和 Qt 大版本对应。比如,Qtcreator 11 版本采用 Qt 6 编译,如果你下载的 Qt 源码是 Qt 5 版本的,那么编译时,会找不到 Qt 6 相关的 cmake 文件,无法进行编译。是否适合当前版本,可以通过 qt-creator-opensource-src 里的 README.md 中介绍确定对应的版本。
下载完成后,使用 tar 命令进行解压
tar -zxvf qt-everywhere-src-5.15.2.tar.xz
tar -zxvf qt-creator-opensource-src-7.0.2.tar.gz
环境配置
安装 Qt 所需的依赖:
sudo apt install build-essential libgl1-mesa-dev libxkbcommon-dev libnss3-dev libdbus-1-dev gperf flex bison
安装 xcb 相关:
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
这一步比较关键,因为涉及到编译之后有 libqxcb.so,如果缺失会导致错误。
如果需要使用到 QWebEngine 模块,那么需要安装以下依赖库:
sudo apt install libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxss-dev libdbus-1-dev libevent-dev libfontconfig1-dev libcap-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libegl1-mesa-dev gperf bison nodejs
编译 Qt
进入解压后的 qt-everywhere-src-5.15.2 目录,开始配置:
./configure -prefix /home/leo/Qt -opensource -confirm-license -nomake examples -release
-prefix /home/leo/Qt: 指定 Qt 的安装路径-opensource: 指定使用开源版本-nomake examples: 不编译 examples-release: release 模式
这个步骤会检查相关的库是否存在,若不存在则将缺少的安装。
安装完缺失的依赖库后,记得先删除 config.cache 缓存文件。
或者使用脚本运行,创建 run.sh 脚本:
#! /bin/bash
./configure -prefix /home/leo/Qt/5 \
-opensource -confirm-license \
-nomake examples \
-nomake tests \
-release \
-skip qt3d \
-skip qtcharts \
-skip qtandroidextras \
-skip qtlocation \
-skip qtmultimedia \
-skip qtsensors \
-skip qtserialbus \
-skip qtserialport \
-skip qtwayland
可以指定跳过编译哪些模块以加快编译速度
开始编译:
make
此过程示机器性能不同,时长不同。
在编译过程中,可能会遇到一些依赖问题,需要根据实际情况进行解决。
当编译完成后,即可安装了
make install
输出信息:
cd doc/src/cmake/ && ( test -e Makefile || /data/home/leo/Documents/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /data/home/leo/Documents/qt-everywhere-src-5.15.2/qtdoc/doc/src/cmake/cmake.pro ) && make -f Makefile install
make[2]: 进入目录“/data/home/leo/Documents/qt-everywhere-src-5.15.2/qtdoc/doc/src/cmake”
make[2]: 对“install”无需做任何事。
make[2]: 离开目录“/data/home/leo/Documents/qt-everywhere-src-5.15.2/qtdoc/doc/src/cmake”
cd doc/ && ( test -e Makefile || /data/home/leo/Documents/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /data/home/leo/Documents/qt-everywhere-src-5.15.2/qtdoc/doc/doc.pro ) && make -f Makefile install
make[2]: 进入目录“/data/home/leo/Documents/qt-everywhere-src-5.15.2/qtdoc/doc”
make[2]: 对“install”无需做任何事。
make[2]: 离开目录“/data/home/leo/Documents/qt-everywhere-src-5.15.2/qtdoc/doc”
make[1]: 离开目录“/data/home/leo/Documents/qt-everywhere-src-5.15.2/qtdoc”
会安装到 /home/leo/Qt 路径下,安装完之后可查看结果。
编译 Qt Creator
编译 Qt Creator 则可使用 cmake 工具进行编译:
cd qt-creator-opensource-src
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/home/leo/Qt -DCMAKE_INSTALL_PREFIX=/home/leo/Qt/Tool/QtCreator
cmake --build build --target=install
输出信息:
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/avddialog.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/avdmanageroutputparser.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/certificatesmodel.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/createandroidmanifestwizard.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/javaeditor.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/javaindenter.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/javalanguageserver.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/javaparser.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/splashscreencontainerwidget.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/splashscreenwidget.cpp.o
[100%] Building CXX object src/plugins/android/CMakeFiles/Android.dir/Android_autogen/EWIEGA46WW/qrc_android.cpp.o
[100%] Linking CXX shared library ../../../lib/qtcreator/plugins/libAutoTest.so
[100%] Built target AutoTest
[100%] Linking CXX shared library ../../../lib/qtcreator/plugins/libAndroid.so
[100%] Built target Android-- Installing: /home/leo/Qt/Tool/QtCreator/share/qtcreator/translations/qtcreator_hr.qm
-- Installing: /home/leo/Qt/Tool/QtCreator/share/qtcreator/translations/qtcreator_ja.qm
-- Installing: /home/leo/Qt/Tool/QtCreator/share/qtcreator/translations/qtcreator_pl.qm
-- Installing: /home/leo/Qt/Tool/QtCreator/share/qtcreator/translations/qtcreator_ru.qm
-- Installing: /home/leo/Qt/Tool/QtCreator/share/qtcreator/translations/qtcreator_sl.qm
-- Installing: /home/leo/Qt/Tool/QtCreator/share/qtcreator/translations/qtcreator_uk.qm
-- Installing: /home/leo/Qt/Tool/QtCreator/share/qtcreator/translations/qtcreator_zh_CN.qm
-- Installing: /home/leo/Qt/Tool/QtCreator/share/qtcreator/translations/qtcreator_zh_TW.qm
-- Installing: /home/leo/Qt/Tool/QtCreator/share/applications
-- Installing: /home/leo/Qt/Tool/QtCreator/share/applications/org.qt-project.qtcreator.desktop
-- Installing: /home/leo/Qt/Tool/QtCreator/share/metainfo/org.qt-project.qtcreator.appdata.xml
看到以上信息,则表示安装完成。
leo@leo-PC:/data/home/leo/Qt/Tool/QtCreator/bin$ ./qtcreator
./qtcreator: relocation error: /data/home/leo/Qt/Tool/QtCreator/bin/../lib/qtcreator/libUtils.so.7: symbol _ZNK11QPushButton9hitButtonERK6QPoint version Qt_5 not defined in file libQt5Widgets.so.5 with link time reference
前往安装目录运行会提示以上错误。
配置 Qt 环境:
leo@leo-PC:~$ vim ~/.bashrc
在尾部加入以下内容:
export QTDIR=/home/leo/Qt/5.15.2
export PATH=$QTDIR/bin:$PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/platforms
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
刷新,qmake 测试
leo@leo-PC:~$ source ~/.bashrc
leo@leo-PC:~$ qmake -v
QMake version 3.1
Using Qt version 5.15.2 in /home/leo/Qt/5.15.2/lib
能看到输出的版本信息,则说明配置成功。
错误解决
WARNING: gperf is required to build QWebEngine.
解决方法:
sudo apt-get install gperf
WARNING: flex is required to build QWebEngine.
解决方法:
sudo apt-get install flex
WARNING: bison is required to build QWebEngine.
解决方法:
sudo apt-get install bison
XCB Util >= 0.3.9... no
https://www.x.org/releases/individual/xcb/ 下载大于 0.3.9 的版本,我这里下载的是 xcb-util-0.4.1. tar. gz,解压并进入文件夹
./configure
make
sudo make install
再次执行 Qt 的 configure 命令,可以看到变成了 Yes
编译错误处理
Package nss was not found in the pkg-config search path.
Perhaps you should add the directory containing `nss.pc'
to the PKG_CONFIG_PATH environment variable
No package 'nss' found
Could not run pkg-config.
解决方法:
sudo apt install libnss3-dev
ERROR at //build/config/linux/pkg_config.gni:103:17: Script returned non-zero exit code.pkgresult = exec_script(pkg_config_script, args, "value")^----------
Current dir: /data/home/leo/Documents/qt-everywhere-src-5.15.2/qtwebengine/src/pdf/release/
Command: /usr/bin/python2 /data/home/leo/Documents/qt-everywhere-src-5.15.2/qtwebengine/src/3rdparty/chromium/build/config/linux/pkg-config.py -p pkg-config dbus-1
Returned 1.
stderr:Package dbus-1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `dbus-1.pc'
to the PKG_CONFIG_PATH environment variable
No package 'dbus-1' found
Could not run pkg-config.See //build/config/linux/dbus/BUILD.gn:12:1: whence it was called.
pkg_config("dbus") {
^-------------------
See //dbus/BUILD.gn:45:22: which caused the file to be included. public_configs = [ "//build/config/linux/dbus" ]^--------------------------
Project ERROR: GN run error!
解决方法:
sudo apt install libdbus-1-dev
ERROR at //build/config/linux/pkg_config.gni:103:17: Script returned non-zero exit code.pkgresult = exec_script(pkg_config_script, args, "value")^----------
Current dir: /data/home/leo/Documents/qt-everywhere-src-5.15.2/qtwebengine/src/pdf/release/
Command: /usr/bin/python2 /data/home/leo/Documents/qt-everywhere-src-5.15.2/qtwebengine/src/3rdparty/chromium/build/config/linux/pkg-config.py -p pkg-config xkbcommon
Returned 1.
stderr:Package xkbcommon was not found in the pkg-config search path.
Perhaps you should add the directory containing `xkbcommon.pc'
to the PKG_CONFIG_PATH environment variable
No package 'xkbcommon' found
Could not run pkg-config.See //ui/events/keycodes/BUILD.gn:12:3: whence it was called.pkg_config("xkbcommon") {^------------------------
See //ui/events/ozone/layout/BUILD.gn:42:15: which caused the file to be included. deps += [ "//ui/events/keycodes:xkb" ]^-------------------------
Project ERROR: GN run error!
解决方法:
sudo apt install libxkbcommon-dev
FAILED: obj/third_party/libjpeg_turbo/simd/jidctfst-neon.o
/usr/bin/gcc -MMD -MF obj/third_party/libjpeg_turbo/simd/jidctfst-neon.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -DOFFICIAL_BUILD -DTOOLKIT_QT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -I../../3rdparty/chromium/third_party/libjpeg_turbo -Igen -I../../3rdparty/chromium -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pipe -pthread -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -fno-delete-null-pointer-checks -Wno-comments -Wno-packed-not-aligned -Wno-dangling-else -Wno-missing-field-initializers -Wno-unused-parameter -fno-omit-frame-pointer -g0 -fvisibility=hidden -O3 -fno-ident -fdata-sections -ffunction-sections -std=gnu11 -c ../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c -o obj/third_party/libjpeg_turbo/simd/jidctfst-neon.o
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c: In function ‘jsimd_idct_ifast_neon’:
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:87:28: error: incompatible types when initializing type ‘int64_t’ {aka ‘long int’} using type ‘int64x1_t’int64_t left_ac_bitmap = vreinterpret_s64_s16(vget_low_s16(bitmap));^~~~~~~~~~~~~~~~~~~~
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:88:29: error: incompatible types when initializing type ‘int64_t’ {aka ‘long int’} using type ‘int64x1_t’int64_t right_ac_bitmap = vreinterpret_s64_s16(vget_high_s16(bitmap));^~~~~~~~~~~~~~~~~~~~
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:408:29: note: use -flax-vector-conversions to permit conversions between vectors with differing element types or numbers of subpartsvaddq_s8(cols_01_s8, vdupq_n_u8(CENTERJSAMPLE)));^~~~~~~~
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:408:50: error: incompatible type for argument 2 of ‘vaddq_s8’vaddq_s8(cols_01_s8, vdupq_n_u8(CENTERJSAMPLE)));^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:31:
/usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:723:36: note: expected ‘int8x16_t’ but argument is of type ‘uint8x16_t’vaddq_s8 (int8x16_t __a, int8x16_t __b)~~~~~~~~~~^~~
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:410:50: error: incompatible type for argument 2 of ‘vaddq_s8’vaddq_s8(cols_45_s8, vdupq_n_u8(CENTERJSAMPLE)));^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:31:
/usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:723:36: note: expected ‘int8x16_t’ but argument is of type ‘uint8x16_t’vaddq_s8 (int8x16_t __a, int8x16_t __b)~~~~~~~~~~^~~
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:412:50: error: incompatible type for argument 2 of ‘vaddq_s8’vaddq_s8(cols_23_s8, vdupq_n_u8(CENTERJSAMPLE)));^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:31:
/usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:723:36: note: expected ‘int8x16_t’ but argument is of type ‘uint8x16_t’vaddq_s8 (int8x16_t __a, int8x16_t __b)~~~~~~~~~~^~~
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:414:50: error: incompatible type for argument 2 of ‘vaddq_s8’vaddq_s8(cols_67_s8, vdupq_n_u8(CENTERJSAMPLE)));^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jidctfst-neon.c:31:
/usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:723:36: note: expected ‘int8x16_t’ but argument is of type ‘uint8x16_t’vaddq_s8 (int8x16_t __a, int8x16_t __b)~~~~~~~~~~^~~
[5/547] /usr/bin/gcc -MMD -MF obj/third_party/libjpeg_turbo/simd/jdsample-neon.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -DOFFICIAL_BUILD -DTOOLKIT_QT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -I../../3rdparty/chromium/third_party/libjpeg_turbo -Igen -I../../3rdparty/chromium -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pipe -pthread -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -fno-delete-null-pointer-checks -Wno-comments -Wno-packed-not-aligned -Wno-dangling-else -Wno-missing-field-initializers -Wno-unused-parameter -fno-omit-frame-pointer -g0 -fvisibility=hidden -O3 -fno-ident -fdata-sections -ffunction-sections -std=gnu11 -c ../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jdsample-neon.c -o obj/third_party/libjpeg_turbo/simd/jdsample-neon.o
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jdsample-neon.c: In function ‘jsimd_h2v1_upsample_neon’:
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jdsample-neon.c:507:36: warning: missing braces around initializer [-Wmissing-braces]uint8x16x2_t output_pixels = { samples, samples };^{ }
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jdsample-neon.c: In function ‘jsimd_h2v2_upsample_neon’:
../../3rdparty/chromium/third_party/libjpeg_turbo/simd/arm/common/jdsample-neon.c:548:36: warning: missing braces around initializer [-Wmissing-braces]uint8x16x2_t output_pixels = { samples, samples };^{ }
[6/547] /usr/bin/gcc -MMD -MF obj/third_party/libjpeg_turbo/libjpeg/jdcolor.o.d -DWITH_SIMD -DNO_GETENV -DUSE_UDEV -DUSE_AURA=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -DOFFICIAL_BUILD -DTOOLKIT_QT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -Igen -I../../3rdparty/chromium -I../../3rdparty/chromium/third_party/libjpeg_turbo -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pipe -pthread -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -fno-delete-null-pointer-checks -Wno-comments -Wno-packed-not-aligned -Wno-dangling-else -Wno-missing-field-initializers -Wno-unused-parameter -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -std=gnu11 -c ../../3rdparty/chromium/third_party/libjpeg_turbo/jdcolor.c -o obj/third_party/libjpeg_turbo/libjpeg/jdcolor.o
ninja: build stopped: subcommand failed.
解决方法:
这个错误是由于 QWebengine 模块的 chromium 包含的 third_party 里第三方库 libjpeg_turbo 在 ARM 下的兼容问题,可以逐个对比 GitHub 的代码修改错误,也可以尝试将最新的 libjpeg_turbo 源文件覆盖。
leo@leo-PC:/data/home/leo/Qt/Tool/QtCreator/bin$ ./qtcreator
qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in "/home/leo/Qt/5.15.2/plugins/platforms"
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.Available platform plugins are: linuxfb (from /home/leo/Qt/5.15.2/plugins/platforms), minimal (from /home/leo/Qt/5.15.2/plugins/platforms), offscreen (from /home/leo/Qt/5.15.2/plugins/platforms), vnc (from /home/leo/Qt/5.15.2/plugins/platforms), webgl (from /home/leo/Qt/5.15.2/plugins/platforms), linuxfb, minimal, offscreen, vnc, webgl.已放弃
查看 /home/leo/Qt/5.15.2/plugins/platforms 安装目录下是否有 libqxcb.so 库,如果没有,则说明源码编译不完整。
需要安装 xcb 相关的库
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
然后重新编译尝试。
总结
以上便是在 ARM 架构平台的 Linux 系统上编译 Qt 整个过程,在编译过程中,需要特别注意的便是依赖库的完整性,如果缺失一些依赖库,Qt 并不会直接报错,编译之后才发现缺失依赖库,有的组件用不了。尤其是 libqxcb.so 库,最开始编译的时候,没用生成它,导致程序无法启动。
所以要特别留意 ./configure 那一步,Qt 会检测相关的环境及依赖库。
Building Qt 5 from Git
https://doc.qt.io/qt-6/linux-requirements.html
https://doc.qt.io/qt-5.15/linux-building.html
https://blog.csdn.net/luoyayun361/article/details/118395262
https://github.com/libjpeg-turbo/libjpeg-turbo/issues/547
https://blog.csdn.net/console_log/article/details/122881398
相关文章:
飞腾ARM UOS编译Qt 5.15.2源码及Qt Creator
背景 在 ARM 架构下,UOS 系统,需要使用 Qt 5.15.2 版本环境,所以只能通过源码编译的形式进行 Qt 环境的部署。 软硬件相关信息: 处理器: 飞腾 FT-2000 4 核制造商: Phytium架构: aarch 64家族: ARMv 8系统:UOS V 20…...
Oracle(2-2)Oracle Net Architecture
文章目录 一、基础知识1、Oracle Net Connections Oracle网络连接2、C/S Application Connection C/S应用程序连接3、OSI Communication Layers OSI通信层4、Oracle Protocol Support Oracle协议支持5、B/S Application Connections B/S应用程序连接6、TwoTypes JDBC Drivers 两…...
高速高精运动控制,富唯智能AI边缘控制器助力自动化行业变革
随着工业大数据时代的到来,传统控制与决策方式无法满足现代数字化工厂对工业大数据分析与决策的需求,AI边缘控制器赋能现代化智慧工厂,实现工业智造与行业变革。 富唯智能AI边缘控制器,基于x86架构的IPC形态产品,通过…...
GPTS应用怎么创建?GPTS无法创建应用很卡怎么办
在首届开发者大会上,OpenAI宣布推出了GPTs功能,也就是GPT Store,类似App Store的应用商店,任何用户都可以去参与创建应用。那么GPTS应用该如何创建?碰到应用无法创建很卡怎么办呢?下面就为大家带来GPTS应用创建图文教程…...
目标检测YOLO实战应用案例100讲-基于无人机的运动目标检测
目录 前言 国内外研究现状 2运动目标检测相关理论基础 2.1 运动目标检测算法...
东莞松山湖数据中心|莞服务器托管的优势
东莞位于珠江三角洲经济圈,交通便利,与广州、深圳等大城市相邻,而且东莞是中国重要的制造业基地,有众多的制造业和科技企业集聚于此,随着互联网和数字化时代的到来,企业都向数字化转型,对于信息…...
时间序列预测实战(十五)PyTorch实现GRU模型长期预测并可视化结果
往期回顾:时间序列预测专栏——包含上百种时间序列模型带你从入门到精通时间序列预测 一、本文介绍 本文讲解的实战内容是GRU(门控循环单元),本文的实战内容通过时间序列领域最经典的数据集——电力负荷数据集为例,深入的了解GRU的基本原理和…...
探索STM32系列微控制器的特性和性能
STM32系列微控制器是意法半导体(STMicroelectronics)公司开发的一款强大的嵌入式微控制器系列。该系列微控制器以其丰富的特性和卓越的性能,成为了嵌入式系统开发领域的首选。本文将深入探索STM32系列微控制器的特性和性能,并结合…...
数据结构(超详细讲解!!)第二十三节 树型结构
1.定义 树型结构是一类重要的非线性数据结构,是以分支关系定义的层次结构。是一种一对多的逻辑关系。 树型结构是结点之间有分支,并且具有层次关系的结构,它非常类似于自然界中的树。树结构在客观世界中是大量存在的,例如家谱、…...
Python 日志记录器logging 百科全书 之 日志回滚
Python 日志记录器logging 百科全书 之 日志回滚 前言 在之前的文章中,我们学习了关于Python日志记录的基础配置。 本文将深入探讨Python中的日志回滚机制,这是一种高效管理日志文件的方法,特别适用于长时间运行或高流量的应用。 知识点&…...
线圈寿命预测 数据集讲解
来自-郭师兄 1.这个是线圈数据的阻抗、电抗等数据,我想根据这个个数据进行线圈寿命预测也就是RUL预测,请问有什么思路吗。 最简单的思路: 数据通过某种方法进行压缩表征到一维再通过 同时需要标签。 确定一个特征 使用降维方法如同PCA来构…...
Flutter.源码分析.flutter/packages/flutter/lib/src/widgets/scroll_view.dart/GridView
Flutter.源码分析 GridView flutter/packages/flutter/lib/src/widgets/scroll_view.dart/GridView 李俊才 的个人博客:https://blog.csdn.net/qq_28550263 本文地址:https://blog.csdn.net/qq_28550263/article/details/134375048 本文提供 Flutter 框…...
IDEA 2022创建Spring Boot项目
首先点击New Project 接下来: (1). 我们点击Spring Initializr来创建。 (2). 填写项目名称 (3). 选择路径 (4). 选择JDK------这里笔者选用jdk17。 (5). java选择对应版本即可。 (6). 其余选项如无特殊需求保持默认即可。 然后点击Next。 稍等一会,…...
Python 框架学习 Django篇 (十) Redis 缓存
开发服务器系统的时候,程序的性能是至关重要的。经过我们前面框架的学习,得知一个请求的处理基本分为接受http请求、数据库处理、返回json数据,而这3个部分中就属链接数据库请求的响应速度最慢,因为数据库操作涉及到数据库服务处理…...
考研数学笔记:线性代数中抽象矩阵性质汇总
在考研线性代数这门课中,对抽象矩阵(矩阵 A A A 和矩阵 B B B 这样的矩阵)的考察几乎贯穿始终,涉及了很多性质、运算规律等内容,在这篇考研数学笔记中,我们汇总了几乎所有考研数学要用到的抽象矩阵的性质…...
C语言--假设共有鸡、兔30只,脚90只,求鸡、兔各有多少只
一.题目描述 假设共有鸡、兔30只,脚90只,求鸡、兔各有多少只? 二.思路分析 本题是一个典型的穷举法例题,而穷举法,最重要的就是条件判断。⭐⭐ 本题中的条件很容易发现: 假设鸡有x只,兔有y只…...
nacos适配达梦数据库
一、下载源码 源码我直接下载gitee上nacos2.2.3的,具体链接:https://gitee.com/mirrors/Nacos/tree/2.2.3,具体如下图: 二、集成达梦数据库驱动 解压源码包,用idea打开源码,等idea和maven编译完成ÿ…...
CTFhub-RCE-读取源代码
源代码: <?php error_reporting(E_ALL); if (isset($_GET[file])) { if ( substr($_GET["file"], 0, 6) "php://" ) { include($_GET["file"]); } else { echo "Hacker!!!"; } } else {…...
Ansible playbook详解
playbook是ansible用于配置,部署,和被管理被控节点的剧本 playbook常用的YMAL格式:(文件名称以 .yml结尾) 1、文件的第一行应该以 "---" (三个连字符)开始,表明YMAL文件的开始。 2、在同一…...
Linux编辑器:vim的简单介绍及使用
目录 1.什么是vim 2.vim的基本概念 3.vim 的基本操作 4. 各模式下的命令集 4.1 正常模式命令集 4.2 末行模式命令集 5.补充 5.1 vim支持多文件编辑 5.2 vim 的配置 1.vim 配置原理 2. 常用简单配置选项: 3. 使用插件 1.什么是vim Vim 是从 vi 发展出…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
用 FFmpeg 实现 RTMP 推流直播
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...
