当前位置: 首页 > news >正文

手把手交叉编译mysql

1.下载mysql(注意下载boost版本,这样会少一步编译)

下载mysql的时候一定要看好交叉编译工具链的版本。因为mysql 8.0需要的工具链版本较高,所以有可能不支持

 

 

查看链接如下:

MySQL :: MySQL 8.0 Reference Manual :: 2.8.2 Source Installation Prerequisites

下载链接如下:

MySQL :: Download MySQL Community Server (Archived Versions)

此处我选择5.7.40

 

2.下载 ncurses 和 openssl。

openssl有版本要求,不要乱下。openssl版本要求查看地址如下

https://dev.mysql.com/doc/refman/8.0/en/source-ssl-library-configuration.html

 

通过右上角版本切换查看需要的openssl版本。

ncurses没有版本要求,但是对自己的PC机可能会有影响。当交叉编译不过且百度又不好解决的时候,换一个版本未尝不是一个办法。最开始我使用的是ncurses 6.4,不通过换成了 6.2,后来又换成5.9才编译通过

我的编译流程是参考这位大师的,所以大家也可以看看他的原博客。我遇到的错误他基本都给出了答案

mysql交叉编译方式_交叉编译mysql_Lanceli_van的博客-CSDN博客

3.编译mysql(注意不是交叉编译,是正常编译)

cmake . -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/zx/mysql-5.7.40-pc/boost -DCMAKE_INSTALL_PREFIX=/home/zx/mysql-5.7.40-pc/output
make 

make install

这一步基本没啥问题

如果报openssl库的错误,直接安装即可

apt-get install openssl
apt-get install libssl-dev
 

4.交叉编译  ncurse 和 openssl

如果ncurse编译错误,且百度不好解决,那就换个版本在交叉编译(我换了仨版本,o(╥﹏╥)o)

交叉编译openssl

./config --prefix=/home/mysqlCompile/openssl-OpenSSL_1_1_1g/__install --cross-compile-prefix=aarch64-none-linux-gnu- no-asm shared

打开Makefile,删除Makefile里面的 -m64


make
make install
 

5.修改mysql的CMakeList,找到  PROJECT(${MYSQL_PROJECT_NAME})  添加如下内容。(注意修改交叉编译工具和路径)(注意格式,一定要注意对齐,否则会出现-Wmisleading-indentation错误。如果不知道前面用tab还是空格,那就直接复制下面的格式来对齐

#----------------------------------------------------------------
IF(1)
    
set(CMAKE_FIND_ROOT_PATH "/home/zx/arm-linux/bin")
set(CMAKE_CROSSCOMPILING TRUE)
SET(CMAKE_SYSTEM_NAME Linux)

# 设置交叉编译器
SET(CMAKE_C_COMPILER_WORKS 1)
SET(CMAKE_CXX_COMPILER_WORKS 1)
SET(CMAKE_C_COMPILER   "arm-linux-gnueabihf-gcc")
SET(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++")

# 交叉编译时的编译选项,cpu 需要该选项的时候添加,没有可以不加  
#SET(ARM_CFLAG "-march=armv7-a -Og -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 -pipe -feliminate-unused-debug-types")
#SET(CMAKE_EXE_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

SET(STACK_DIRECTION 1)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_CROSSCOMPILING 1)
set(BOOST_INCLUDE_DIR /home/zx/mysql-5.7.40/boost/boost_1_59_0)
set(LOCAL_BOOST_DIR /home/zx/mysql-5.7.40/boost/boost_1_59_0)
    
# openssl configuration
SET(OPENSSL_INCLUDE_DIR /home/zx/openssl-1.1.1g/output/include)
SET(OPENSSL_LIBRARY /home/zx/openssl-1.1.1g/output/lib/libssl.so.1.1)
SET(CRYPTO_LIBRARY /home/zx/openssl-1.1.1g/output/lib/libcrypto.so.1.1)

SET(CMAKE_CXX_LINK_FLAGS "-L/home/zx/openssl-1.1.1g/output/lib -lssl -lcrypto")
ENDIF()
#----------------------------------------------------------------

PROJECT(${MYSQL_PROJECT_NAME})

#----------------------------------------------------------------
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARM_CFLAG}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARM_CFLAG}")
#----------------------------------------------------------------
 

修改mysql的 cmake/libevent.cmake 文件,(在说一遍,注意格式对齐)

MACRO(FIND_LIBEVENT_VERSION)

  SET(LIBEVENT_VERSION "2.1.11-stable")
  SET(COMPILE_TEST_RESULT TRUE)
  SET(RUN_OUTPUT "2.1.11-stable")

  # MESSAGE(STATUS "TRY_EVENT TEST_RUN_RESULT is ${TEST_RUN_RESULT}")
  # MESSAGE(STATUS "TRY_EVENT COMPILE_TEST_RESULT is ${COMPILE_TEST_RESULT}")
  # MESSAGE(STATUS "TRY_EVENT COMPILE_OUTPUT_VARIABLE is ${OUTPUT}")
  # MESSAGE(STATUS "TRY_EVENT RUN_OUTPUT_VARIABLE is ${RUN_OUTPUT}")

  IF(COMPILE_TEST_RESULT)
    SET(LIBEVENT_VERSION_STRING "${RUN_OUTPUT}")
    STRING(REGEX REPLACE
      "([.-0-9]+).*" "\\1" LIBEVENT_VERSION "${LIBEVENT_VERSION_STRING}")
    MESSAGE(STATUS "LIBEVENT_VERSION_STRING ${LIBEVENT_VERSION_STRING}")
    MESSAGE(STATUS "LIBEVENT_VERSION (${WITH_LIBEVENT}) ${LIBEVENT_VERSION}")
  ELSE()
    MESSAGE(WARNING "Could not determine LIBEVENT_VERSION")
  ENDIF()
ENDMACRO()

6.执行cmake

cmake ../ -DCMAKE_INSTALL_PREFIX=/home/zx/mysql-5.7.40/output -DMYSQL_DATADIR=/home/zx/mysql-5.7.40/output/data -DWITH_BOOST=/home/zx/mysql-5.7.40/boost/boost_1_59_0 -DSYSCONFDIR=/etc -DEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci -DENABLED_LOCAL_INFILE=1 -DSTACK_DIRECTION=1 -DCURSES_LIBRARY=/home/zx/ncurses-5.9/output/lib/libncurses.a -DCURSES_INCLUDE_PATH=/home/zx/ncurses-5.9/output/include -DWITH_MYISAM_STORAGE_ENGINE=1

此时报了一个错

-- Performing Test X_PUTLONG_NOT_USE_CONST - Failed
-- Checking for module 'libtirpc'
--   No package 'libtirpc' found

解决办法参考此网站解决

 mysql 编译提示 undefined reference to `xdr_pointer‘_llongint的博客-CSDN博客

尝试解决1、直接安装:

yum install -y libtirpc-devel

再编译提示: 

-- Checking for module 'libtirpc'
--   Found libtirpc, version 0.2.4
CMake Warning at cmake/rpc.cmake:58 (MESSAGE):
  Ignoring libtirpc version 0.2.4, need at least 1.0
Call Stack (most recent call first):

尝试解决2:手动添加
版本太低没有捷径可走,只能手动重新编译,从这下载一个新点的版本:https://www.linuxfromscratch.org/blfs/view/svn/basicnet/libtirpc.html 

./configure --prefix=`pwd`/install
make -j`nproc` && make install


再移除系统库:

yum remove -y libtirpc-devel

再编译还是提示找不到: 

-- Performing Test X_PUTLONG_NOT_USE_CONST - Failed
-- Checking for module 'libtirpc'
--   No package 'libtirpc' found

查看库查找方式:(进入到mysql的cmake目录下) 

$ sed -n '49,53p' cmake/rpc.cmake
MACRO(MYSQL_CHECK_RPC)
  IF(LINUX AND NOT LIBTIRPC_VERSION_TOO_OLD)
    MYSQL_CHECK_PKGCONFIG()
    PKG_CHECK_MODULES(TIRPC libtirpc)
  ENDIF()

看到PKG_CHECK_MODULES 方式查找只需要再拷贝一下 .pc 文件即可

cp install/lib/pkgconfig/libtirpc.pc /usr/lib64/pkgconfig/

查找成功提示 

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.27.1")
-- Checking for module 'libtirpc'
--   Found libtirpc, version 1.3.2

 后面遇到错误跟大佬基本相同,但大佬有些内容写的微微有些模糊,稍微走了下弯路,故进行一个理解更新

第一个错误

/bin/sh: 1: comp_err: not found
这个错误从字面上理解,就是这个脚本没有发现。解决办法就是把我们之前本机编译得到的 comp_err 文件移动到编译环境中的 bin 文件夹中:

cp /home/mysql-5.7.40/extra/comp_err /home/zx/arm-linux/bin/
touch /home/zx/arm-linux/bin//bin/comp_err

继续执行 make 命令进行编译,我们会遇到第二个错误。

/bin/sh: 1: ./libmysql_api_test: Exec format error
解决办法是将本机编译得到的 libmysql_api_test 文件,移动到交叉编译对应的文件夹中:

cp /home/zx/mysql-5.7.40-pc/libmysql/libmysql_api_test /home/zx/mysql-5.7.40/libmysql/
注意,是从第一步编译的路径下文件拷贝到交叉编译的mysql根目录下的libmysql

继续执行 make 命令进行编译,我们会遇到第三个错误。 

error “Unsupported platform”


In file included from /home/mysqlCompile/mysql-5.7.32/storage/innobase/include/os0atomic.h:375,
                 from /home/mysqlCompile/mysql-5.7.32/storage/innobase/include/ut0ut.h:47,
                 from /home/mysqlCompile/mysql-5.7.32/storage/innobase/include/univ.i:591,
                 from /home/mysqlCompile/mysql-5.7.32/storage/innobase/include/ha_prototypes.h:40,
                 from /home/mysqlCompile/mysql-5.7.32/storage/innobase/api/api0api.cc:35:
/home/mysqlCompile/mysql-5.7.32/storage/innobase/include/os0atomic.ic:230:2: error: #error "Unsupported platform"
  230 | #error "Unsupported platform"
 

这个问题如提示所示,是平台不支持,原因是宏定义的问题。os0atomic.ic 中有 HAVE_IB_GCC_ATOMIC_COMPARE_EXCHANGE 与 IB_STRONG_MEMORY_MODEL 这两个宏定义。

在 os0atomic.h 的 60 行附近, 从以上的内容可以看出,只有定义了

 __i386__ || __x86_64__ || _M_IX86 || _M_X64 || __WIN__ 
 

才能定义 IB_STRONG_MEMORY_MODEL,但是我们是交叉编译 mysql,平台是 arm,明显上面的内容没有定义,所以在交叉编译的时候就没有定义,导致 os0atomic.ic 中的内容没有编译。修改办法如下:

#if defined __i386__ || defined __x86_64__ || defined _M_IX86 \
    || defined _M_X64 || defined __WIN__

#define IB_STRONG_MEMORY_MODEL

#else

#define HAVE_ATOMIC_BUILTINS

#endif /* __i386__ || __x86_64__ || _M_IX86 || _M_X64 || __WIN__ */
 

HAVE_ATOMIC_BUILTINS 这个宏不是随便定义的,可在文章 MariaDB · 社区动态 · MariaDB on Power8 中了解到。

但这样并不能完全解决问题,在 os0atomic.h 文件中找到 os_compare_and_swap_thread_id() 这个函数的定义,而在这个函数的前面有编译条件如下:

# ifdef HAVE_IB_ATOMIC_PTHREAD_T_GCC
#if defined(HAVE_GCC_SYNC_BUILTINS)
#  define os_compare_and_swap_thread_id(ptr, old_val, new_val) \
    os_compare_and_swap(ptr, old_val, new_val)
#else
UNIV_INLINE
bool
os_compare_and_swap_thread_id(volatile os_thread_id_t* ptr, os_thread_id_t old_val, os_thread_id_t new_val)
{
  return __atomic_compare_exchange_n(ptr, &old_val, new_val, 0,
                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
}
#endif /* HAVE_GCC_SYNC_BUILTINS */

 

但是交叉编译工具GCC中没有这两个宏,所以运行不了,解决方法是改为如下:

# ifdef HAVE_ATOMIC_BUILTINS
#if defined(HAVE_ATOMIC_BUILTINS)
#  define os_compare_and_swap_thread_id(ptr, old_val, new_val) \
    os_compare_and_swap(ptr, old_val, new_val)
#else
UNIV_INLINE
bool
os_compare_and_swap_thread_id(volatile os_thread_id_t* ptr, os_thread_id_t old_val, os_thread_id_t new_val)
{
  return __atomic_compare_exchange_n(ptr, &old_val, new_val, 0,
                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
}
#endif /* HAVE_GCC_SYNC_BUILTINS */
 

在上面大佬的交叉编译中,有个错误

在原基础修改之上,还需修改storage/innobase/include/os0atomic.ic的第 198 行

#elif defined(IB_STRONG_MEMORY_MODEL)

#elif defined(IB_STRONG_MEMORY_MODEL) || defined (HAVE_ATOMIC_BUILTINS)

继续执行 make 命令进行编译,我们会遇到第四个错误。 

No rule to make target ‘scripts/comp_sql’ 


make[2]: *** No rule to make target 'scripts/comp_sql', needed by 'scripts/sql_commands_sys_schema.h'.  Stop.

解决办法如下: 

cp /home/zx/mysql-5.7.40-pc/scripts/comp_sql /home/zx/mysql-5.7.40/scripts/
touch  /home/zx/mysql-5.7.40/scripts/comp_sql

注意路径还是mysql的根目录下的scripts拷贝,非安装目录

继续执行 make 命令进行编译,我们会遇到第五个错误。

/bin/sh: 1: comp_sql: not found
解决办法如下:

cp /home/zx/mysql-5.7.40-pc/scripts/comp_sql /home/zx/arm-linux/bin/
touch /home/zx/arm-linux/bin/comp_sql

注意是拷贝第一步编译的mysql文件

 继续执行 make 命令进行编译,我们会遇到第六个错误。

/bin/sh: 1: gen_lex_hash: not found
解决办法如下:

cp /home/zx/mysql-5.7.40-pc/sql/gen_lex_hash /home/zx/arm-linux/bin/
touch /home/zx/arm-linux/bin/gen_lex_hash

注意是拷贝第一步编译的mysql文件

继续执行 make 命令进行编译,我们会遇到第七个错误。  

/bin/sh: 1: gen_lex_token: not found
解决办法如下:

cp /home/zx/mysql-5.7.40-pc/sql/gen_lex_token /home/zx/arm-linux/bin/
touch /home/zx/arm-linux/bin/gen_lex_token

注意是拷贝第一步编译的mysql文件

继续执行 make 命令进行编译,我们会遇到第八个错误。

cannot find -ltirpc
/home/lanceli/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/bin/ld: cannot find -ltirpc
collect2: error: ld returned 1 exit status
make[2]: *** [rapid/plugin/group_replication/CMakeFiles/group_replication.dir/build.make:1488: rapid/plugin/group_replication/group_replication.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:5620: rapid/plugin/group_replication/CMakeFiles/group_replication.dir/all] Error 2
make: *** [Makefile:163: all] Error 2
 

这个问题直接修改link.txt,查找并将里面的-ltirpc删除即可。如果感兴趣,可以向后查看解决思路。

这个问题我们需要查看 rapid/plugin/group_replication/CMakeFiles/group_replication.dir/build.make 文件查找(CMAKE_COMMAND) -E cmake_link_script所在的位置: 

cd /home/mysqlCompile/mysql-5.7.32/rapid/plugin/group_replication && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/group_replication.dir/link.txt --verbose=$(VERBOSE)  

这里执行了一行命令,而命令的位置在 cmake_link_script CMakeFiles/group_replication.dir/link.txt 

这里显示找不到 -ltirpc 这一个指令,我们查看 link.txt 文件,并找出 -ltirpc 将它删除即可。

继续执行 make 命令进行编译,我们会遇到第九个错误
 

/bin/sh: 1: protoc: not found
解决办法如下:

cp /home/zx/mysql-5.7.40-pc/extra/protobuf/protoc /home/zx/arm-linux/bin/
root@DESKTOP-PGPFAI6:~# touch /home/zx/arm-linux/bin/protoc

继续执行 make 命令进行编译,我们会遇到第十个错误。 

cannot find -lboost_system -lboost_chrono
这个问题跟之前的 -ltirpc 一样,都是声明后找不到对应的库,这次我们不能将这两个删除掉,因为编译的过程需要用到这两个库。

/home/lanceli/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/bin/ld: cannot find -lboost_system
/home/lanceli/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/bin/ld: cannot find -lboost_chrono
collect2: error: ld returned 1 exit status
make[2]: *** [client/dump/CMakeFiles/mysqlpump.dir/build.make:92: client/dump/mysqlpump] Error 1
make[1]: *** [CMakeFiles/Makefile2:12520: client/dump/CMakeFiles/mysqlpump.dir/all] Error 2
make: *** [Makefile:163: all] Error 2
 

根据错误提示,我们打开 client/dump/CMakeFiles/mysqlpump.dir/build.make 文件,定位到第 92 行。 

cd /home/zx/mysql-5.7.40/client/dump && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/mysqlpump.dir/link.txt --verbose=$(VERBOSE)
 

打开相同路径下的 link.txt 文件,并将其中 -lboost_system -lboost_chrono 修改为: 

/home/zx/mysql-5.7.40/bost/boost_1_59_0/__install/lib/libboost_system.so -ldl /home/zx/mysql-5.7.40/bost/__install/lib/libboost_chrono.so -ldl

继续执行 make 命令进行编译,然后等待代码编译结束。 

输入 make install 进行安装,即可在设置的安装路径找到相应的文件。

 

相关文章:

手把手交叉编译mysql

1.下载mysql(注意下载boost版本,这样会少一步编译) 下载mysql的时候一定要看好交叉编译工具链的版本。因为mysql 8.0需要的工具链版本较高,所以有可能不支持 查看链接如下: MySQL :: MySQL 8.0 Reference Manual :: …...

升压模块直流隔离低压转高压稳压电源5v12v24v转50V100V110V150V200V250V400V500V600V800V1000V

特点效率高达80%以上1*2英寸标准封装单电压输出价格低稳压输出工作温度: -40℃~85℃阻燃封装,满足UL94-V0 要求温度特性好可直接焊在PCB 上应用HRB W2~40W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为:4.5~9V、9~18V、及18~36VDC标准&…...

LeetCode:977 有序数组平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 […...

JAVA环境配置多个环境(全,详细,简单)

下载java包:https://www.oracle.com/java/technologies/downloads (8版本稳定) 直接无脑安装java程序 (包括jdk-开发与jre-运行) 接下来是java环境配置: 创建系统变量 (用户变量也可以&#…...

10 Seata配置Nacos注册中心和配置中心

Seata配置Nacos注册中心和配置中心 Seata支持注册服务到Nacos,以及支持Seata所有配置放到Nacos配置中心,在Nacos中统一维护; 高可用(集群)模式下就需要配合Nacos来完成: 具体配置如下 注册中心 Seata-server端配置注册中心,…...

[数据库]表的增删改查进阶

●🧑个人主页:你帅你先说. ●📃欢迎点赞👍关注💡收藏💖 ●📖既选择了远方,便只顾风雨兼程。 ●🤟欢迎大家有问题随时私信我! ●🧐版权:本文由[你帅…...

Kubernetes调度之Pod亲和性

Kubernetes调度中的Pod亲和性abstract.pngPod亲和性节点亲和性,是基于节点的标签对Pod进行调度。而Pod亲和性则可以实现基于已经在节点上运行Pod的标签来约束新Pod可以调度到的节点。具体地,如果X上已经运行了一个或多个满足规则Y的Pod,则这个…...

建立相关在线社群的3个简单步骤

在线社群管理和社交媒体营销通常被视为一回事。虽然社群管理确实是社交媒体营销的一个关键部分,但它的意义超越了社交媒体的内容发布。因此,在线社群对于企业的数字营销十分重要。创建、维护和发展社群不是一件容易的工作,也不是一个快速的过…...

安全运营的新模式

安全运营的新模式是传统安全运维的扩展和升级,其实现落地需要管理和技术两斱面同时支撑、相互衎接和配合,缺夰仸何一个都是行不通的。管理斱面,在顶层设计时,网络安全运营要根据国家信息安全等级保护 2.0 的相关要求,参…...

Day10-网页布局实战CSS3

一 补充 1 画三角形 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…...

代码规范(C/C++规范)

文章目录前言个人编写的代码规范链接请求合作大体章节END前言 什么是代码规范 一套用于统一代码开发的准则 为什么需要代码规范 提升代码可读性&#xff0c;提升团队效率 个人编写的代码规范 近期本人编写了一份以C/C为主的代码规范。 其他语言开发者也可以阅读参考。 本…...

春招冲刺(九):计算属性和监视属性总结

计算属性和监视属性总结 Q1&#xff1a;计算属性 姓&#xff1a;<input type"text" v-model"firstName"><br><br> 名&#xff1a;<input type"text" v-model"lastName"><br><br> 姓名&#xff…...

数据挖掘(作业1)

实验开始前先配置环境 以实验室2023安装的版本为例&#xff1a; 1、安装anaconda&#xff1a;&#xff08;anaconda自带Python,安装了anaconda就不用再安装Python了&#xff09; 下载并安装 Anaconda3-2022.10-Windows-x86_64.exe 自己选择安装路径&#xff0c;其他使用默认…...

【UE4 RTS游戏】01-项目准备

步骤新建一个工程&#xff0c;选择俯视角游戏模板我命名工程如下&#xff1a;删除场景内的所有cube再删除Floor和Wall删除TopDownCharacter删除“NavgationMeshBoundVolume”删除“TamplateLabel”和“RecastNavMesh-Default”删除LightmassImportanceVolume、PostProcessVolum…...

登录系统账号检测--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

实例8&#xff1a;登录系统账号检测 登录系统一般具有账号密码检测功能&#xff0c;即检测用户输入的账号密码是否正确。若用户输入的账号或密码不正确&#xff0c;提示 “用户名或密码错误”和“您还有*次机会”&#xff1b; 若用户输入的账号和密码正确&#xff0c;提示“登…...

CentOS8基础篇12:使用RPM管理telnet-server软件包

一、RPM包管理工具简介 RedHat软件包管理工具(RedHat Package Manager&#xff0c;RPM) RPM软件包工具常用于软件包的安装、查询、更新升级、校验、卸载以及生成.rpm格式的软件包等操作。 RPM软件包工具只能管理后缀是.rpm的软件包。软件包的命名格式&#xff1a; 软件名称…...

IT女神文章记录之自己

匆匆时光&#xff0c;一转眼自己已经从一个学生转变成一个职场工作者了刚出校园的时候&#xff0c;对职场充满了憧憬&#xff0c;觉得自己可以大展身手然后其实在我毕业后2年内&#xff0c;踏入码农阶段的时候&#xff0c;是一段非常压抑的工作&#xff0c;不知道谁能体会到那种…...

Compose 动画 (四) : AnimatedVisibility 各种入场和出场动画效果

AnimatedVisibility中的EnterTransition 和 ExitTransition &#xff0c;用来配置入场/出场时候的动画效果。 默认的入场效果是 fadeIn() expandVertically() 默认的出场效果是 fadeOut() shrinkVertically() 1. EnterTransition和ExitTransition支持的动画 enter的参数类…...

notepad++学习小技巧

不要小瞧了notepadd 这个可是我们的cv好帮手。。。 实战1背景&#xff0c;我找一个同事要表结构 结果他给我了一个xml。顿时一懵&#xff0c;我也不知道为啥好像是从前端扣下来的。 建表我只需要 columnName, displayName当作是comment&#xff0c; dataTypeNamecolumnType借鉴…...

Android supports-screens 屏幕适配

基本概念 supports-screens用于设置屏幕相关&#xff0c;处于Manifest的子标签中。 使您能够指定应用支持的屏幕尺寸&#xff0c;并为比应用支持的最大屏幕还大的屏幕启用屏幕兼容性模式。请务必始终在应用中使用此元素指定应用支持的屏幕尺寸。 注意&#xff1a;建议不要在屏…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...