【嵌入式移植】2、使用Crosstool-NG制作交叉编译工具链

【嵌入式移植】2、使用Crosstool-NG制作交叉编译工具链

  • 1 准备工作
    • 1.1 下载Crosstool-NG
    • 1.2 尝试配置crosstool-ng,安装依赖项
      • 1.2.1 Crosstool-NG所需软件包
    • 1.3 编译及安装
  • 2 制作交叉编译工具链
    • 2.1 选择配置文件
    • 2.2 使用用户界面菜单进行配置
      • 2.2.1 Paths and misc options
      • 2.2.2 Target options
      • 2.2.3 Toolchain options
      • 2.2.4 Operating System
      • 2.2.5 Binary utilities
      • 2.2.6 C-library
      • 2.2.7 C Compiler
      • 2.2.8 Debug facilities
      • 2.2.9 Companion libraries
      • 2.2.10 Companion tools
    • 2.3 下载配套库源码压缩包
    • 2.4 ct-ng build

1 准备工作

通过SSH登录建立的ubuntu-22.04.3虚拟机环境,新建文件夹并进入

mkdir arm && cd arm
mkdir crosstool-ng && cd crosstool-ng

1.1 下载Crosstool-NG

下载http://crosstool-ng.org

wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.26.0.tar.bz2

或直接访问网址下载源码,通过FTP上传至/arm/crosstool-ng目录下,运行解压命令。

tar -xjvf crosstool-ng-1.26.0.tar.bz2

进入/crosstool-ng-1.26.0目录,查看目录下结构
请添加图片描述

1.2 尝试配置crosstool-ng,安装依赖项

在/opt目录下新建/crosstool-ng目录

sudo mkdir /opt/crosstool-ng

查看路径,确保当前进入/crosstool-ng-1.26.0目录,运行配置命令,这里通过–prefix指定crosstool-ng安装目录为/opt/crosstool-ng

./configure --prefix=/opt/crosstool-ng

不出意外的话应该会报错
请添加图片描述
从报错信息可知缺少可用的C编译器

configure: error: in `/home/tzw/arm/crosstool-ng/crosstool-ng-1.26.0':
configure: error: no acceptable C compiler found in $PATH

通过命令查看确实没有安装gcc,如果安装gcc的话会输出gcc版本

gcc -v

请添加图片描述
这里我们不直接安装gcc,通过安装build-essential同时安装gcc、g++、make等依赖项,build-essential 是编译程序的基础软件包,通过命令可查看build-essential依赖关系

apt-cache depends build-essential

请添加图片描述
安装build-essential

sudo apt install build-essential

安装完成后再次运行命令,不出意外的话应该还会报错

./configure --prefix=/opt/crosstool-ng

请添加图片描述
这次是缺少flex词法分析器工具,因此安装flex

sudo apt install flex

……
按照上述步骤进行,直至将crosstool-ng所有依赖软件包安装完毕。
运行configure配置成功输出结果
请添加图片描述

1.2.1 Crosstool-NG所需软件包

sudo apt install build-essential flex texinfo help2man gawk libtool libtool-bin bison libncurses5-dev
  • build-essential:包含libc、gcc、g++、make、dpkg-dev等在编译和构建软件时常用的工具和库;
  • flex:即Fast Lexical Analyzer Generator,是一个可以生成文法分析程序的工具;
  • texinfo:(makeinfo)通过单个源文件来生成在线信息和打印输出的文档系统;
  • help2man:从程序输出自动生成简单的手册文档;
  • gawk:一种查找替换文本工具;
  • libtool:通用库支持脚本,将使用动态库的复杂性隐藏在统一、可移植的接口中;使用libtool的标准方法,可以在不同平台上创建并调用动态库;主要的一个作用是在编译大型软件的过程中解决了库的依赖问题;将繁重的库依赖关系的维护工作承担下来,从而释放了程序员的人力资源。libtool提供统一的接口,隐藏了不同平台间库的名称的差异等细节,生成一个抽象的后缀名为la高层库libxx.la(其实是个文本文件),并将该库对其它库的依赖关系,都写在该la的文件中;
  • bison:一种通用解析器生成器,它将带注释的上下文无关文法转换为使用LALR(1)解析器表的确定性LR或广义LR(GLR)解析器;
  • libncurses5-dev:ncurses库,提供了一个API,允许开发者在文本终端下使用图形用户界面。

1.3 编译及安装

确认当前路径为/crosstool-ng-1.26.0,执行命令

./configure --prefix=/opt/crosstool-ng
make
sudo make install

安装完成后在/opt/crosstool-ng/bin路径下生成可执行文件文件ct-ng
请添加图片描述
将其添加到环境变量PATH中,可以直接修改~/.bashrc文件,也可以使用如下命令,.bashrc文件位于当前登录用户默认home路径下

echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc
source ~/.bashrc

查看环境变量PATH,确认添加成功

$PATH

请添加图片描述
并查看是否安装成功

ct-ng -v
GNU Make 4.3
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

2 制作交叉编译工具链

使用crosstool-ng可以通过用户界面菜单进行配置,也可以使用源码中自带的配置文件,这里使用源码中自带的配置文件,并通过用户界面菜单进行修改。

2.1 选择配置文件

在/crosstool-ng-1.26.0/samples路径下,保存了各类CPU制作交叉编译工具链的示例配置文件

ls samples
或者
ct-ng list-samples

请添加图片描述
这里以Armv8-A处理器中的Cortex-A53为例,ARM Cortex-A53是一款基于ARMv8指令系统的八级流水线结构处理器。在28nm HPM制造工艺下、运行SPECint2000测试时,单个核心的功耗不超过0.13W,主频可达1.5Ghz。其推出市场之初,是世界上能耗比最高、面积最小的64位应用处理器。

Cortex-A53为基于ARMv8-A架构的64位CPU,拥有2种执行模式,AArch64和AArch32,因此选择/crosstool-ng-1.26.0/samples/aarch64-rpi3-linux-gnu/crosstool.config配置文件为基础进行配置。查看文件内容

cat aarch64-rpi3-linux-gnu/crosstool.config
CT_CONFIG_VERSION="4"
CT_ARCH_ARM=y
CT_ARCH_CPU="cortex-a53"
CT_ARCH_64=y
CT_TARGET_VENDOR="rpi3"
CT_KERNEL_LINUX=y
CT_BINUTILS_LINKER_LD_GOLD=y
CT_BINUTILS_GOLD_THREADS=y
CT_BINUTILS_LD_WRAPPER=y
CT_BINUTILS_PLUGINS=y
CT_CC_LANG_CXX=y
CT_DEBUG_GDB=y

前几项意义很明确,后几项意义如下

  • CT_BINUTILS_LINKER_LD_GOLD:使用ld.gold代替ld,加快链接速度;
  • CT_BINUTILS_GOLD_THREADS:使能多线程;
  • CT_BINUTILS_LD_WRAPPER:使能wrap选项;
  • CT_BINUTILS_PLUGINS:启用gold链接器的插件支持;
  • CT_CC_LANG_CXX:支持C++,至于为什么不是CT_CC_LANG_CPP,是因为CPP已经被使用了,表示C PreProcessor;
  • CT_DEBUG_GDB:启用gdb调试工具

在/crosstool-ng路径下新建src、crosstool-build、x-tools文件夹,并将/crosstool-ng-1.26.0/samples/aarch64-rpi3-linux-gnu/crosstool.config文件复制到/crosstool-ng路径下,重命名为.config,后续将在/crosstool-ng路径下进行制作,即${CT_TOP_DIR}=~/arm/crosstool-ng

cd ~/arm/crosstool-ng
mkdir src crosstool-build x-tools
cp crosstool-ng-1.26.0/samples/aarch64-rpi3-linux-gnu/crosstool.config .config

2.2 使用用户界面菜单进行配置

运行命令,进入用户界面菜单配置,在每个配置项条目上按下?将显示帮助信息。

对于需要配置的地方,在后续小节中使用加粗显示,其它条目仅进行介绍或略过。 < Select > 进入当前选项中进行详细设置, < Exit > 退出到上一层级, 修改过程中及时使用 < Save > 保存,避免丢失配置。

cd ~/arm/crosstool-ng
ct-ng menuconfig

请添加图片描述

2.2.1 Paths and misc options

Crosstool-NG behavior:

  1. Use obsolete features:使能此项将启用一些早先版本的功能,如早先版本的内核头文件、gcc等。
  2. Try features marked as EXPERIMENTAL:启用实验功能(可能是未经验证的)。
  3. Debug crosstool-NG:按Y选择此项,将新增3项,按Y选择Save intermediate steps,则可以保存构建过程中每一步的信息,可以在构建中断后从中断处重新运行,减少总时间。选择Save intermediate steps后将新增选择gzip saved states,保持默认即可。

Paths:

  1. Local tarballs directory:本地压缩包保存路径,按回车进入设置,将路径设置为${HOME}/arm/crosstool-ng/src,这个路径用于保存制作工具链时需要下载的各项源码压缩包。
  2. Save new tarballs:默认为选择。
  3. Prefer buildroot-style layout of the downloads:使用和buildroot相同形式的目录结构,这里默认不选择。
  4. Working directory:工作目录路径,将保存所有构建过程中的文件,将路径设置为${CT_TOP_DIR}/crosstool-build
  5. Prefix directory:此路径为生成的工具链存储路径,设置为{HOME}/arm/crosstool-ng/x-tools}…
  6. Remove the prefix dir prior to building:在每次构建前删除之前的构建文件,默认选择。
  7. Remove documentation:删除手册、信息等文档,节省约8MiB空间,默认选择。
  8. Install licenses:安装所有组件的许可文件,默认选择。
  9. Render the toolchain read-only:将生成的工具链目录及其子目录设置为只读,一般用于商用,默认选择。
  10. Strip host toolchain executables:去除宿主机下工具链可执行文件中不必要的信息,可以加快编译速度,默认选择。
  11. Strip targe toolchain executables:去除目标机下工具链可执行文件中不必要的信息,这里默认不选。

Downloading:
配置源码包相关下载、校验等选项,全部保持默认即可,由于让crosstool-ng自己下载源码包太慢,后续会直接从镜像源进行下载并保存至src路径下。
Extracting:
源码包解压相关选项,保持默认即可。
Logging:
构建过程日志相关选项,保持默认即可。

2.2.2 Target options

Target Architecture:选择arm.

Options for arm:

  1. Suffix to the arch-part:CPU架构后缀,如armv5tel中的v5tel、alphaev6中的ev6,用于指定架构的架构的具体分支,且将附加到工具链名称上,如armv5tel-linux-gnu-gcc。按理说应该输入v8-a+crc之类的,表示为armv8-a+crc,但这里暂时留空。
  2. Omit vendor part of the target tuple:省略目标元组的供应商部分,默认留空。

Generic target options:

  1. Build a multilib toolchain:启用针对所选CPU架构的某些分支进行优化的C库,尚未进行充分测试,默认不选。
  2. Attempt to combine libraries into a single directory:尝试将库合并到一个目录中,由于并非工具链的所有使用者都可以处理在多个目录中的库,因此crosstool-ng尝试将库组合进入单个/lib目录,并将其他目录下的库创建为符号链接保存在此/lib目录下,默认选择。
  3. Use the MMU:使用MMU(内存管理单元),若所选的架构有MMU则选用,默认选择。
  4. Endianness:字节顺序,默认选择小端 Little endian。
  5. Bitness:CPU位数,默认选择64-bit。

Target optimisations:

  1. Emit assembly for CPU:根据所用GCC版本的手册选择,这里按照配置文件中默认设置为cortex-a53。
  2. Target CFLAGS:指定构建工具链过程中各个库的编译选项,这里默认留空。
  3. Target LDFLAGS:指定构建工具链过程中各个库的链接选项,这里默认留空。

2.2.3 Toolchain options

General toolchain options:

  1. Use sysroot’ed toolchain:使用gcc“闪亮的新功能”—sysroot,允许用户构建可能需要额外依赖项的项目。例如,假设必须在项目中使用库libasdf.so,在构建了该库后将无法使用,因为项目不知道如何找到这个库。当然可以通过指定在某个特定路径中查找这个库,但在有许多库要使用的情况下,将很不方便,并且会产生混乱的标记。通过sysroot功能,这将这些库安装到sysroot中,避免上述问题。默认选择。
  2. sysroot directory name:默认设置为sysroot。
  3. sysroot prefix dir:保持留空。
  4. Build Static Toolchain:构建静态工具链,如果工具链需要在其它宿主机上运行,且不确定是否有所需版本的库,可以选择启用此项。默认不选择。
  5. Add crosstool-NG version to --version output:增加版本信息,默认选择。
  6. Toolchain ID string:用于识别工具链内部版本的字符串,默认留空。
  7. Toolchain bug URL:用于反馈错误报告的链接,默认留空。

Tuple completion and aliasing:

  1. Tuple’s vendor string:工具链中供应商名称,工具链名称形式为arch-vendor-kernel-system,这里改为各位想改字符串的就行。
  2. Tuple’s sed transform:默认留空。
  3. Tuple’s alias:工具链别名,默认留空。

Toolchain type:
默认设置为Cross,表示交叉编译。
Build system:
保持默认状态。

2.2.4 Operating System

  1. Target OS:选择为linux。这里也可以选择为bare-metal,表示为裸机程序构建的工具链。
  2. Show linux version from:保持默认即可。
  3. Source of linux:默认为Released tarball,即发布的源码压缩包。
  4. Version of linux:默认选择为6.4。
  5. Kernel verbosity:暂时选择为Full commands。
  6. Build shared libraries:默认选择。

2.2.5 Binary utilities

  1. Binary format:工具链二进制可执行文件默认格式,默认ELF。
  2. Binutils:二进制工具集,默认选择为binutils。
  3. Show binutils versions from:默认选择为GNU。
  4. Source of binutils:默认为Released tarball,即发布的源码压缩包。
  5. Version of binutils:binutils版本,默认选择2.40。
  6. Linkers to enable:默认使能ld,gold。
  7. Enable threaded gold:默认使能gold的多线程并行链接功能。
  8. Add ld wrapper:默认使能wrap选项。
  9. Enable support for plugins:默认使能插件。
  10. Enable -z relro in ELF linker by default:默认设置为M,由所选架构的内部默认值来配置。
  11. Enable deterministic archives by default:默认使能。
  12. binutils extra config:默认留空。
  13. binutils libraries for the target:默认留空。

2.2.6 C-library

  1. C library:默认选择glibc。
  2. Show glibc versions from:默认为GNU。
  3. Source of glibc:默认为Released tarball,即发布的源码压缩包。
  4. Version of glibc:默认选择为2.38.
  5. Build libidn add-on:默认不选择。
  6. extra config:默认留空。
  7. Extra config params:默认留空。
  8. Enable debug symbols:默认选择。
  9. extra target CFLAGS:默认留空。
  10. Enable obsolete libcrypt:不使用早先版本,默认不选择。
  11. Disable symbols versioning:默认不选择。
  12. Oldest supported ABI:默认不选择。
  13. Force unwind support:与某些架构的旧版本glibc上构建NPTL有关,这里默认选择。
  14. Build and install locales:默认不选择。
  15. Minimum supported kernel version:与kernel headers保持一致,Same as kernel headers (default)。
  16. Stack-smashing protection (SSP) in glibc:glibc中堆栈崩溃保护,设置为默认default。
  17. Enable -Werror during the build:默认选择,将警告信息视为编译错误。
  18. Enable -fcommon flag for older version of glibc when using GCC >=10:默认不选择。
  19. Threading implementation to use:仅可选择为native。
  20. Create /etc/ld.so.conf file:默认不选择。
  21. Install a cross ldd-like helper:默认选择,构建一个类似ldd的帮助程序。

2.2.7 C Compiler

均保持默认(后续再看)。

2.2.8 Debug facilities

选择gdb,其它保持默认。

2.2.9 Companion libraries

配套库,这里可以查看构建工具链所需的部分库,可以根据此处列表提前下载各项源码。

expat-2.5.0
gettext-0.21
gmp-6.2.1
isl-0.26
libconv-1.16
mpc-1.2.1
mpfr-4.2.1
ncurses-6.4
zlib-1.2.13
zstd-1.5.5

2.2.10 Companion tools

默认都不选择

完成配置后进行保存 < Save > ,然后退出 < Exit >

2.3 下载配套库源码压缩包

依次下载所需源码压缩包,其中大部分压缩包可在镜像源网站上的gnu目录下找到,并保存在~/arm/crosstool-ng/src路径下。

  • binutils-2.40:二进制工具集,包含addr2line、nm、readelf、size、objcopy、objdump、strings、strip、ar、ld、ranlib
  • expat-2.5.0:快速流式XML解析器
  • gcc-13.2.0:GNU Compiler Collection,GNU编译器套件
  • gdb-13.2:程序调试工具
  • gettext-0.21:国际化语言支持库,用于系统的国际化和本地化,可以在编译程序的时候使用本国语言支持(NLS),可以使程序的输出使用用户设置的语言而不是英文
  • glibc-2.38:GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc
  • gmp-6.2.1:GNU多精度算数库
  • isl-0.26:Integer Set Library for the polyhedral model,多面体模型整数库集
  • libiconv-1.16:转换字符编码库
  • linux-6.4
  • mpc-1.2.1:用于复数的算术,具有任意高的精度和正确的舍入结果的C库
  • mpfr-4.2.1:用于具有正确舍入的多精度浮点计算的C库
  • ncurses-6.4:字符终端处理库,能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能
  • zlib-1.2.13:一个免费的压缩库
  • zstd-1.5.5:开源压缩工具

binutils工具集指令

指令描述
addr2line根据指令地址获取对应的函数、源文件名、行号
nm列出程序文件中的符号以及在内存中的地址
readelf显示有关ELF二进制文件的信息
size查看目标文件中的段大小
objcopy将一种对象文件翻译成另外一种
objdump查看程序段信息以及反汇编
strip剔除可执行程序中的调试信息
ar将目标文件打包成静态库
ld链接器
ranlib生成文件的索引,加快查找速度

2.4 ct-ng build

在~/arm/crosstool-ng路径下执行ct-ng build命令

cd ~/arm/crosstool-ng
ct-ng build

然后就是等待……

等待……

等待……

经过65min23s的等待(4-core@2GHz),迎来了……报错(ಥ_ಥ)

啊???????????????????????????????????????

请添加图片描述
这个错误查了很久,最后在crosstool-ng的issue里找到了:no usable python found at /usr/bin/python3
·
按照描述安装python-dev-is-python3即可

sudo apt install python-dev-is-python3

然后因为前面配置的时候在Debug crosstool-NG选项中设置了Save intermediate steps,因此可以直接使用命令继续build,查看报错输出信息之前最后一次保存构建状态

Saving state to restart at step 'libc_post_cc'...
Saving state to restart at step 'companion_libs_for_target'...
Saving state to restart at step 'binutils_for_target'...
Saving state to restart at step 'debug'...

因此输入下述命令可从step debug继续运行

ct-ng build RESTART=debug

最后一共经过95min12s的等待,编译完成,生成的交叉编译工具链位于~/arm/crosstool-ng/x-tools/aarch64-tzw-linux-gnu路径下
请添加图片描述
查看aarch64-tzw-linux-gnu-gcc版本

cd ~/arm/crosstool-ng/x-tools/aarch64-tzw-linux-gnu/bin
./aarch64-tzw-linux-gnu-gcc -v

请添加图片描述

Target: aarch64-tzw-linux-gnu
Configured with:/home/tzw/arm/crosstool-ng/crosstool-build/aarch64-tzw-linux-gnu/src/gcc/configure 
--build=x86_64-build_pc-linux-gnu 
--host=x86_64-build_pc-linux-gnu 
--target=aarch64-tzw-linux-gnu 
--prefix=/home/tzw/arm/crosstool-ng/x-tools/aarch64-tzw-linux-gnu 
--exec_prefix=/home/tzw/arm/crosstool-ng/x-tools/aarch64-tzw-linux-gnu 
--with-sysroot=/home/tzw/arm/crosstool-ng/x-tools/aarch64-tzw-linux-gnu/aarch64-tzw-linux-gnu/sysroot 
--enable-languages=c,c++ 
--with-cpu=cortex-a53 
--with-pkgversion='crosstool-NG 1.26.0' 
--enable-__cxa_atexit 
--disable-libmudflap 
--disable-libgomp --disable-libssp 
--disable-libquadmath 
--disable-libquadmath-support 
--disable-libsanitizer 
--disable-libmpx 
--with-gmp=/home/tzw/arm/crosstool-ng/crosstool-build/aarch64-tzw-linux-gnu/buildtools 
--with-mpfr=/home/tzw/arm/crosstool-ng/crosstool-build/aarch64-tzw-linux-gnu/buildtools 
--with-mpc=/home/tzw/arm/crosstool-ng/crosstool-build/aarch64-tzw-linux-gnu/buildtools 
--with-isl=/home/tzw/arm/crosstool-ng/crosstool-build/aarch64-tzw-linux-gnu/buildtools 
--enable-lto 
--enable-threads=posix 
--enable-target-optspace 
--enable-plugin --enable-gold 
--disable-nls 
--disable-multilib 
--with-local-prefix=/home/tzw/arm/crosstool-ng/x-tools/aarch64-tzw-linux-gnu/aarch64-tzw-linux-gnu/sysroot 
--enable-long-longThread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.2.0 (crosstool-NG 1.26.0)

交叉编译工具链制作成功!

本章完结撒花✿✿ヽ(°▽°)ノ✿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多态,包,权限修饰符,final关键字

文章目录 今日内容教学目标 第一章 多态1.1 多态的形式1.2 多态的使用场景1.3 多态的定义和前提1.4 多态的运行特点1.5 多态的弊端1.6 引用类型转换1.6.1 为什么要转型1.6.2 向上转型&#xff08;自动转换&#xff09;1.6.3 向下转型&#xff08;强制转换&#xff09;1.6.4 案例…

【MySQL四大引擎,数据库管理,数据表管理,数据库账号管理】

一. MySQL四大引擎 查看存储引擎 SHOW ENGINES support 字段说明 defaulti的为默认的引擎 为YES表示可以使用 为NO表示不能使用 四大引擎 InnoDB InnoDB表类型可以看作是对MyISAM的进一步更新产品&#xff0c;它提供了事务、行级锁机制和外键约束的功能&#xff0c;也是目前…

构建网络信息安全的中国方案 - 国密SSL协议介绍以及国密Nginx服务器部署

国密SSL协议 国密SSL协议指的是采用国密算法&#xff0c;符合国密标准的安全传输协议。简而言之&#xff0c;国密SSL就是SSL/TLS协议的国密版本。TLS协议定义有三个版本号&#xff0c;为0x0301、0x0302、0x0303&#xff0c;分别对应TLS 1.0、1.1、1.2。国密SSL为了避免冲突&am…

听GPT 讲Rust源代码--compiler(32)

File: rust/compiler/rustc_middle/src/middle/exported_symbols.rs 在Rust的源代码中&#xff0c;rust/compiler/rustc_middle/src/middle/exported_symbols.rs文件的作用是实现编译器中处理导出符号的功能。 该文件中定义了一些结构体和枚举&#xff0c;用于描述导出符号的信…

电脑丢失dll文件怎么办,dll修复工具可一键修复dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“找不到指定的模块”或“无法找到某某.dll文件”。这种情况通常是由于dll文件丢失或损坏导致的。那么&#xff0c;究竟是什么原因导致了dll文件的丢失呢&#xff1f;又该如何预防dll文件…

2024校招,网易互娱游戏测试工程师一面

前言 大家好&#xff0c;今天回顾一下&#xff0c;我前段时间参加的游戏测试工程师技术面试 两个面试官&#xff0c;一个提问&#xff0c;另一个负责记录 过程 自我介绍比赛经历介绍一下使用的博弈算法穷举算法对性能有什么影响怎么评估局面好坏出现的bug怎么解决的&#x…

mysql5.7安装-windows安装版本

下载地址 官网地址:https://www.mysql.com/官网下载地址:https://dev.mysql.com/downloads/mysql/阿里云镜像站下载:https://mirrors.aliyun.com/mysql/华为云镜像站地址:https://mirrors.huaweicloud.com/home华为云镜像站下载:https://mirrors.huaweicloud.com/mysql/Downlo…

自动驾驶apollo9.0 Dreamview Debug方法

Apollo 9.0 安装&编译方法 # 拉取源码 git clone gitgithub.com:ApolloAuto/apollo.git git checkout v9.0.0# 启动docker bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh# 编译project ./apollo.sh build默认启动方式 default mode wget https:…

SpringBoot实用开发(十一)-- MongoDB的客户端(studio 3T)的安装与简单使用

目录 1.studio 3T的下载与安装 2.studio 3T的连接 3.studio 3T的简单使用 3.1 创建数据库

houdini python self tools

01.geo 对应创建mantra import hou null_path[] for i in hou.selectedNodes():mantrahou.node(out).createNode(ifd,{0}.format(i.name()))mantra.parm(trange).set(1)framehou.parmTuple({0}/f.format(mantra.path()))frame.deleteAllKeyframes()for s in i.children():if …

Web前端-JavaScript(BOM)

文章目录 1.1 常用的键盘事件1.1.1 键盘事件1.1.2 键盘事件对象1.1.3 案例一 1.2 BOM1.2.1 什么是BOM1.2.2 BOM的构成1.2.3 window1.2.4 window对象常见事件窗口/页面加载事件**第1种****第2种** 调整窗口大小事件 1.2.5 定时器setTimeout() 炸弹定时器停止定时器**案例&#x…

解决ImportError: Failed to import test module: sys.__init__

解决ImportError: Failed to import test module: sys.init 背景 学习通过文件夹执行测试脚本时&#xff0c;出现了错误&#xff1a;ImportError: Failed to import test module: sys.__init__ 解决过程 根据报错信息&#xff1a;sys is not a package大胆猜测可能是文件名…

VMware linux虚拟机卸载不干净导致二次安装之后虚拟机ping不通主机

问题就是主机能ping通虚拟机&#xff0c;虚拟机不能ping通主机&#xff0c;我看网上又说虚拟机和主机没在同一网段的&#xff0c; 有些确实是这个情况但是首先你要打开控制面板–》网络–》网络和共享中心-》更改适配器设置&#xff0c;然后 会弹出下面的界面 如果你的没有上面…

【UE Niagara学习笔记】01 - 浮动的蒲公英

目录 效果 步骤 一、创建材质 二、创建Niagara粒子 2.1 创建Niagara模板 2.2 通过用户参数设置粒子大小 2.3 设置数量、风速、透明度变化 效果 步骤 一、创建材质 1. 在虚幻商城中把“Realistic Starter VFX Pack Vol 2”添加到项目中&#xff0c;该资产中所包含的…

ubuntu开机卡在[OK],,,,,的界面无法正常开机后进入桌面

0.现象 ubuntu开机&#xff0c;进入一片代码行&#xff0c;会卡在某一行&#xff0c;一直没有新的进展 1.原因 有很多原因可能导致这个现象&#xff0c;内核升级与固件不匹配、磁盘出了问题等等如果没有做过什么特别的事情&#xff0c;也可能是存储空间满了&#xff0c;也会…

探索2024年软件测试的几大主导趋势

进入2024年&#xff0c;考虑影响测试环境的问题至关重要。这种思考将成为团队了解主要瓶颈和实现当今不断提高的期望的首要因素。 01 了解关键测试瓶颈 毋庸置疑&#xff0c;现代团队需要不断创新、适应和拥抱最新趋势&#xff0c;以保持竞争力并提供以客户为中心的解决方案。尽…

微信小程序 引导地址授权 获取位置信息 uniapp

概述 获取位置信息&#xff0c;需要保证是否授权位置信息&#xff0c;有几个条件是导致无法授权的原因 &#xff08;1&#xff09;微信应用未授权定位设置 &#xff08;2&#xff09;首次进入小程序未授权位置信息 &#xff08;3&#xff09;小程序之前阻止过授权位置信息 &…

力扣383.赎金信 -- 哈希表

思路&#xff1a;记录magazine每个字符个数&#xff0c;然后记录ransomNote每个字符&#xff08;每有一个减1&#xff09;&#xff0c;假如出现<0的情况说明ransomnode有字符的个数超过了magazine则无法构成&#xff0c;否则可以构成 代码&#xff1a; class Solution { pu…

SpringBoot实用开发(十二)-- MongoDB语句的简单使用

目录 1.新增文档 2.删除文档 3.修改文档 4.查询文档 4.1 基础查询 4.2 条件

asp实现ACCESS中日期时间的比较

今天程序中要实现时间作为查询条件的功能&#xff01;使用的是ASPACCESS。 在ACCESS数据库中&#xff0c;日期时间的比较操作符主要有> 、<、三个&#xff01;但不能直接把比较时间用这些操作符相连&#xff01;为了区分时间类型和其它类型&#xff0c;ACCESS中在时…