当前位置: 首页 > 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;建议不要在屏…...

C语言核心知识体系总结

C语言核心知识体系总结本文旨在系统梳理C语言的基础与进阶知识点&#xff0c;帮助读者建立清晰的知识框架。内容涵盖&#xff1a;程序编译过程、数据类型与变量、运算符与表达式、控制结构、函数、指针、结构体与共用体、动态内存分配、文件操作等。适合复习巩固或查漏补缺。第…...

深度解析VinXiangQi:基于深度学习的中国象棋AI连线工具终极指南

深度解析VinXiangQi&#xff1a;基于深度学习的中国象棋AI连线工具终极指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi VinXiangQi是一款基于YOLOv5深…...

Polkadot 正在补完 L1 里没人做过的“垂直 RISC-V 集成“

作者&#xff1a; PaperMoon团队 位 Parity 工程师周末买了一块 RISC-V 板子&#xff0c;把节点跑起来看看会断在哪里。配图是一张工程师的桌子&#xff0c;板子、线、调试器、电源。 很多人会觉得这就是一个 maker culture 风格的小实验。但如果你把过去三年 Polkadot 在 IS…...

SEAforth多核芯片在工业控制中的并行处理优势

1. SEAforth芯片架构解析&#xff1a;工业控制的并行革命在工业自动化领域&#xff0c;传统单核MCU正面临越来越严峻的性能瓶颈。我曾参与过一个大型石化厂的温度监测系统改造项目&#xff0c;原系统采用常规ARM处理器&#xff0c;当需要同时处理32路热电偶信号、4路压力传感器…...

BaiduPCS-Go深度解析:从原理到实践的性能调优进阶指南

BaiduPCS-Go深度解析&#xff1a;从原理到实践的性能调优进阶指南 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go BaiduPCS-Go作为一款功能强大的命令行百度…...

为什么83%的Enterprise客户在第6个月触发License超额预警?揭秘后台用量监控盲区与动态配额优化公式

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;License超额预警现象的全局观测与根本归因 License超额预警并非孤立事件&#xff0c;而是软件许可治理体系中多维耦合失衡的外在表征。在企业级 DevOps 平台&#xff08;如 GitLab Ultimate、JetBrains…...

Unity游戏逆向第一步:手把手教你从APK里提取Assembly-CSharp.dll(附ILSpy使用指南)

Unity游戏逆向实战&#xff1a;从APK提取C#脚本的完整指南 在移动游戏开发领域&#xff0c;Unity引擎凭借其跨平台特性占据了重要地位。对于开发者而言&#xff0c;了解Unity打包后的文件结构不仅是调试的必要技能&#xff0c;也是学习优秀游戏设计的重要途径。本文将详细介绍如…...

TQVaultAE终极指南:解锁泰坦之旅无限仓库与装备管理新境界

TQVaultAE终极指南&#xff1a;解锁泰坦之旅无限仓库与装备管理新境界 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 你是否曾在泰坦之旅的冒险中&#xff0c;面对满仓的传…...

告别玄学调参:用Python+NumPy手把手复现MIMO信道SVD分解与注水算法

告别玄学调参&#xff1a;用PythonNumPy手把手复现MIMO信道SVD分解与注水算法 在无线通信领域&#xff0c;MIMO&#xff08;多输入多输出&#xff09;技术通过利用空间维度显著提升了系统容量和可靠性。然而&#xff0c;许多工程师在实际应用中常陷入"玄学调参"的困境…...

AI工具搭建自动化视频生成NVENC

最近在折腾视频生成这块&#xff0c;发现AI工具搭配NVENC&#xff08;NVIDIA的硬件编码器&#xff09;做自动化视频生成&#xff0c;其实是个挺有意思的组合。很多人以为写个脚本调用FFmpeg就能搞定&#xff0c;但真正要把NVENC用透&#xff0c;背后的门道还是挺多的。不如从几…...