如何使用 MSYS2 编译最新版的 coreutils 源码(目前最新版本为 coreutils-9.4)

news2024/12/26 21:11:01

文章目录

    • 一、coreutils 源码下载
    • 二、MSYS2 安装编译工具
      • 1. pacman -Suy 更新软件仓库
      • 2. pacman -S msys/gcc 安装gcc
      • 3. pacman -S msys/make 安装make工具
      • 4. 解压缩 coreutils 压缩包
      • 5. 执行 ./configure 命令
      • 6. 执行 make 进行编译(cygwin-3.4.8版本的一个bug导致的报错)
      • 7. 重新执行 make 进行编译(因为一些依赖包未安装,仍报错)
      • 8. 再次执行 make 进行编译(成功)
      • 9. 打包生成的可执行程序
      • 10. 测试 coreutils 工具包中的实用程序
    • 三、最后&总结

上一篇文章总结了:MSYS2 介绍、下载与安装、Pacman常用命令

本文将演示如何使用 MSYS2 编译 coreutils 源码。

一、coreutils 源码下载

官网镜像仓库:Index of /gnu/coreutils
Github 仓库:coreutils/coreutils/tags
这里下载目前最新版本:coreutils-9.4.tar.gz

虽然但是我还是要提一下:MSYS2 安装完成后,默认会安装coreutils软件包,版本为 8.32

Administrator@GC MSYS ~
$ pacman -Qs coreutils
local/coreutils 8.32-5
    The basic file, shell and text manipulation utilities of the GNU operating system

一般情况下也没必要使用最新版,这里仅是为了演示如何使用MSYS2编译项目,所以就拿coreutils试试。

二、MSYS2 安装编译工具

使用 MSYS 环境进行编译 coreutils

1. pacman -Suy 更新软件仓库

Administrator@GC MSYS ~
$ pacman -Suy
:: Synchronizing package databases...
 clangarm64 is up to date
 mingw32 is up to date
 mingw64 is up to date
 ucrt64 is up to date
 clang32 is up to date
 clang64 is up to date
 msys is up to date
:: Starting core system upgrade...
 there is nothing to do
:: Starting full system upgrade...
 there is nothing to do

我这里已经是最新了。

2. pacman -S msys/gcc 安装gcc

Administrator@GC MSYS ~
$ pacman -S msys/gcc
resolving dependencies...
looking for conflicting packages...

Packages (8) binutils-2.41-2  isl-0.26-1  mpc-1.3.1-1  msys2-runtime-devel-3.4.8-1
             msys2-w32api-headers-11.0.1.r0.gc3e587c06-1
             msys2-w32api-runtime-11.0.1.r0.gc3e587c06-1  windows-default-manifest-6.4-1
             gcc-11.3.0-4

Total Download Size:    41.38 MiB
Total Installed Size:  318.84 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
 isl-0.26-1-x86_64               745.0 KiB   260 KiB/s 00:03 [###############################] 100%
 msys2-w32api-headers-11.0....     5.2 MiB  1131 KiB/s 00:05 [###############################] 100%
 mpc-1.3.1-1-x86_64               78.5 KiB   147 KiB/s 00:01 [###############################] 100%
 binutils-2.41-2-x86_64            5.4 MiB   979 KiB/s 00:06 [###############################] 100%
 windows-default-manifest-6...  1388.0   B  3.45 KiB/s 00:00 [###############################] 100%
 msys2-runtime-devel-3.4.8-...   338.8 KiB  68.2 KiB/s 00:05 [###############################] 100%
 gcc-11.3.0-4-x86_64              27.6 MiB  2.63 MiB/s 00:10 [###############################] 100%
 msys2-w32api-runtime-11.0....     2.0 MiB   194 KiB/s 00:11 [###############################] 100%
 Total (8/8)                      41.4 MiB  3.86 MiB/s 00:11 [###############################] 100%
(8/8) checking keys in keyring                               [###############################] 100%
(8/8) checking package integrity                             [###############################] 100%
(8/8) loading package files                                  [###############################] 100%
(8/8) checking for file conflicts                            [###############################] 100%
(8/8) checking available disk space                          [###############################] 100%
:: Processing package changes...
(1/8) installing binutils                                    [###############################] 100%
(2/8) installing isl                                         [###############################] 100%
(3/8) installing mpc                                         [###############################] 100%
(4/8) installing msys2-runtime-devel                         [###############################] 100%
(5/8) installing msys2-w32api-headers                        [###############################] 100%
(6/8) installing msys2-w32api-runtime                        [###############################] 100%
(7/8) installing windows-default-manifest                    [###############################] 100%
(8/8) installing gcc                                         [###############################] 100%
:: Running post-transaction hooks...
(1/1) Updating the info directory file...

3. pacman -S msys/make 安装make工具

Administrator@GC MSYS ~
$ pacman -S msys/make
resolving dependencies...
looking for conflicting packages...

Packages (1) make-4.4.1-1

Total Download Size:   0.49 MiB
Total Installed Size:  1.61 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
 make-4.4.1-1-x86_64             505.9 KiB   129 KiB/s 00:04 [###############################] 100%
(1/1) checking keys in keyring                               [###############################] 100%
(1/1) checking package integrity                             [###############################] 100%
(1/1) loading package files                                  [###############################] 100%
(1/1) checking for file conflicts                            [###############################] 100%
(1/1) checking available disk space                          [###############################] 100%
:: Processing package changes...
(1/1) installing make                                        [###############################] 100%
:: Running post-transaction hooks...
(1/1) Updating the info directory file...

4. 解压缩 coreutils 压缩包

Administrator@GC MSYS ~
$ cd C:/Chen/Mytools/

Administrator@GC MSYS /c/Chen/Mytools
$ tar -xzf coreutils-9.4.tar.gz coreutils-9.4/

Administrator@GC MSYS /c/Chen/Mytools
$ cd coreutils-9.4

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4
$

5. 执行 ./configure 命令

在解压后的coreutils-9.4根目录下,执行.configure命令,将生成Makefile文件。
这个可能需要执行数十分钟。

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4
$ ./configure
configure: loading site script /etc/config.site
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
...
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating po/Makefile.in
config.status: creating gnulib-tests/Makefile
config.status: creating lib/config.h
config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4
$

6. 执行 make 进行编译(cygwin-3.4.8版本的一个bug导致的报错)

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4
$ make
  GEN      lib/alloca.h
  GEN      lib/arpa/inet.h
  GEN      lib/configmake.h
  GEN      lib/ctype.h
  GEN      lib/dirent.h
  GEN      lib/error.h
  ...
  In file included from /usr/include/sys/signal.h:23,
                 from /usr/include/signal.h:6,
                 from ./lib/signal.h:52,
                 from /usr/include/time.h:158,
                 from ./lib/time.h:54,
                 from ./lib/sys/stat.h:51,
                 from ./lib/fcntl.h:64,
                 from ./lib/unistd.h:105,
                 from ./lib/stdlib.h:104,
                 from /usr/include/sys/cpuset.h:12,
                 from /usr/include/sys/_pthreadtypes.h:12,
                 from /usr/include/sys/types.h:221,
                 from ./lib/sys/types.h:46,
                 from ./lib/stdio.h:75,
                 from lib/long-options.c:27:
/usr/include/cygwin/signal.h:121:3: error: unknown type name 'pthread_attr_t'
  121 |   pthread_attr_t *sigev_notify_attributes; /* notification attributes */
      |   ^~~~~~~~~~~~~~
In file included from /usr/include/signal.h:6,
                 from ./lib/signal.h:52,
                 from /usr/include/time.h:158,
                 from ./lib/time.h:54,
                 from ./lib/sys/stat.h:51,
                 from ./lib/fcntl.h:64,
                 from ./lib/unistd.h:105,
                 from ./lib/stdlib.h:104,
                 from /usr/include/sys/cpuset.h:12,
                 from /usr/include/sys/_pthreadtypes.h:12,
                 from /usr/include/sys/types.h:221,
                 from ./lib/sys/types.h:46,
                 from ./lib/stdio.h:75,
                 from lib/long-options.c:27:
/usr/include/sys/signal.h:227:29: error: expected ')' before 'int'
  227 | int pthread_kill (pthread_t, int);
      |                             ^~~~
      |                             )
In file included from /usr/include/sys/stat.h:22,
                 from ./lib/sys/stat.h:54,
                 from ./lib/fcntl.h:64,
                 from ./lib/unistd.h:105,
                 from ./lib/stdlib.h:104,
                 from /usr/include/sys/cpuset.h:12,
                 from /usr/include/sys/_pthreadtypes.h:12,
                 from /usr/include/sys/types.h:221,
                 from ./lib/sys/types.h:46,
                 from ./lib/stdio.h:75,
                 from lib/long-options.c:27:
/usr/include/cygwin/stat.h:27:3: error: unknown type name 'timestruc_t'
   27 |   timestruc_t   st_atim;
      |   ^~~~~~~~~~~
/usr/include/cygwin/stat.h:28:3: error: unknown type name 'timestruc_t'
   28 |   timestruc_t   st_mtim;
      |   ^~~~~~~~~~~
/usr/include/cygwin/stat.h:29:3: error: unknown type name 'timestruc_t'
   29 |   timestruc_t   st_ctim;
      |   ^~~~~~~~~~~
/usr/include/cygwin/stat.h:32:3: error: unknown type name 'timestruc_t'
   32 |   timestruc_t   st_birthtim;
      |   ^~~~~~~~~~~
  CC       lib/libcoreutils_a-mbrlen.o
make[2]: *** [Makefile:15547: lib/libcoreutils_a-long-options.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/c/Chen/Mytools/coreutils-9.4'
make[1]: *** [Makefile:22396: all-recursive] Error 1
make[1]: Leaving directory '/c/Chen/Mytools/coreutils-9.4'
make: *** [Makefile:8835: all] Error 2

我这里执行make后有报错(见上述示例),这个错误困扰我两天了,在网上查阅了多资料,最终在 can’t compile coreutils-9.3 any more after upgrade to cygwin-3.4.8 找到了原因。原因是这个问题是cygwin-3.4.8版本的一个bug,而我的MSYS2依赖的刚好是cygwin-3.4.8版本,真的是好巧不巧。。。

MSYS2中依赖的cygwin,对应的是 msys2-runtimemsys2-runtime-devel 软件包。

Administrator@GC MSYS ~
$ pacman -Qs msys2-runtime
local/msys2-runtime 3.4.8-1
    Posix emulation engine for Windows
local/msys2-runtime-devel 3.4.8-1
    MSYS2 headers and libraries

另外写这篇文章的前一天,cygwin官网已经修复了这个问题,在cygwin-3.4.9版本。
cygwin/cygwin/tree/cygwin-3.4.9
cygwin/cygwin/compare/cygwin-3.4.7…cygwin-3.4.8
cygwin/cygwin/compare/cygwin-3.4.8…cygwin-3.4.9
cygwin 3.4.9-1 问题修复

msys2/msys2-rumtime 仓库也同步了 cygwin-3.4.9 版本:
msys2/msys2-runtime
msys2/msys2-runtime/compare/cygwin-3.4.8…cygwin-3.4.9

msys2/MSYS2-packages 软件包代码仓库也同步了 msys2-runtime 为 3.4.9 版本:
msys2/MSYS2-packages
msys2/MSYS2-packages/tree/master/msys2-runtime

在这里插入图片描述
但是有个问题是,MSYS2 软件仓库的msys2-runtimemsys2-runtime-devel目前仍是 3.4.8 版本,比源码要落后(具体什么时候更新到3.4.9,我也不清楚)。
https://mirror.umd.edu/msys2/msys/x86_64/
在这里插入图片描述
也就是说目前,无法通过 pacman -Syu msys2-runtime 更新到3.4.9版本。
当然你可以自己编译最新版本,然后通过pacman -U <本地软件包>进行安装,可参考:Creating Packages

自己编译还是有些麻烦的,这里找到了一种简便方法供参考:
方案:修改 /usr/include/sys/cpuset.h文件
MSYS2安装路径usr/include/sys/目录下,找到cpuset.h文件(前提是已安装了msys2-runtime-devel,安装gcc时会自动安装这个)

将文件中的#include <stdlib.h>#include <string.h> 注释掉。
在这里插入图片描述

7. 重新执行 make 进行编译(因为一些依赖包未安装,仍报错)

修改完上述的问题后,(先执行下make clean),重新执行make命令,又遇到了如下报错。

In file included from src/system.h:172,
                 from src/chroot.c:26:
./lib/gettext.h:26:11: fatal error: libintl.h: No such file or directory
   26 | # include <libintl.h>
      |           ^~~~~~~~~~~
compilation terminated.
make[2]: *** [Makefile:12465: src/chroot.o] Error 1
make[2]: Leaving directory '/c/Chen/Mytools/coreutils-9.4'
make[1]: *** [Makefile:22396: all-recursive] Error 1
make[1]: Leaving directory '/c/Chen/Mytools/coreutils-9.4'
make: *** [Makefile:8835: all] Error 2

这个报错也困扰我了好久,因为我不知道编译 coreutils 都需要哪些依赖。后来通过
Package: coreutils | MSYS2 Packages 找到了MSYS2官网在构建coreutils-8.32时依赖项

在这里插入图片描述

啥也别说了,把这些依赖项都安装上吧。
(有些我已经装过了,我这里通过 pacman -Qs 查看,autotools gmp-devel help2man还没有装)

Administrator@GC MSYS ~
$ pacman -S autotools gmp-devel help2man

8. 再次执行 make 进行编译(成功)

安装完依赖软件包后,(先执行下make clean),再次执行make命令。
这次很顺利,编译生成了Windows可执行的exe实用程序

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4/
$ make -j4
...

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4
$ ls src/*.exe
'src/[.exe'          src/expr.exe              src/nproc.exe       src/stat.exe
 src/b2sum.exe       src/factor.exe            src/numfmt.exe      src/stty.exe
 src/base32.exe      src/false.exe             src/od.exe          src/sum.exe
 src/base64.exe      src/fmt.exe               src/paste.exe       src/sync.exe
 src/basename.exe    src/fold.exe              src/pathchk.exe     src/tac.exe
 src/basenc.exe      src/getlimits.exe         src/pinky.exe       src/tail.exe
 src/cat.exe         src/ginstall.exe          src/pr.exe          src/tee.exe
 src/chcon.exe       src/groups.exe            src/printenv.exe    src/test.exe
 src/chgrp.exe       src/head.exe              src/printf.exe      src/timeout.exe
 src/chmod.exe       src/hostid.exe            src/ptx.exe         src/touch.exe
 src/chown.exe       src/id.exe                src/pwd.exe         src/tr.exe
 src/chroot.exe      src/join.exe              src/readlink.exe    src/true.exe
 src/cksum.exe       src/kill.exe              src/realpath.exe    src/truncate.exe
 src/comm.exe        src/link.exe              src/rm.exe          src/tsort.exe
 src/cp.exe          src/ln.exe                src/rmdir.exe       src/tty.exe
 src/csplit.exe      src/logname.exe           src/runcon.exe      src/uname.exe
 src/cut.exe         src/ls.exe                src/seq.exe         src/unexpand.exe
 src/date.exe        src/make-prime-list.exe   src/sha1sum.exe     src/uniq.exe
 src/dd.exe          src/md5sum.exe            src/sha224sum.exe   src/unlink.exe
 src/df.exe          src/mkdir.exe             src/sha256sum.exe   src/uptime.exe
 src/dir.exe         src/mkfifo.exe            src/sha384sum.exe   src/users.exe
 src/dircolors.exe   src/mknod.exe             src/sha512sum.exe   src/vdir.exe
 src/dirname.exe     src/mktemp.exe            src/shred.exe       src/wc.exe
 src/du.exe          src/mv.exe                src/shuf.exe        src/who.exe
 src/echo.exe        src/nice.exe              src/sleep.exe       src/whoami.exe
 src/env.exe         src/nl.exe                src/sort.exe        src/yes.exe
 src/expand.exe      src/nohup.exe             src/split.exe

9. 打包生成的可执行程序

执行make install命令,打包编译生成的可执行程序。
需要注意的是,在执行 make install 命令时,要以 root 用户或者使用 sudo 命令来执行,以便拥有足够的权限进行安装。

说明:
我这里不想改动MSYS2自带的coreutils-8.32-5版本,所以就不执行make install了。因为前面我在执行./configure 时忘记添加 --prefix 参数指定安装路径了,所以这里手动搞一下。

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4
$ mkdir bin

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4
$ cp src/*.exe bin

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4
$ cp /usr/bin/msys-2.0.dll bin

注意:通过MSYS2编译的exe程序,依赖msys-2.0.dll库,因此在脱离MSYS2环境使用时,需要将msys-2.0.dll一并打包。

10. 测试 coreutils 工具包中的实用程序

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4/bin
$ expr --version
expr (GNU coreutils) 8.32
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://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.

Written by Mike Parker, James Youngman, and Paul Eggert.

Administrator@GC MSYS /c/Chen/Mytools/coreutils-9.4/bin
$ cmd
Microsoft Windows [版本 10.0.19045.3208]
(c) Microsoft Corporation。保留所有权利。

C:\Chen\Mytools\coreutils-9.4\bin>expr --version
expr (GNU coreutils) 9.4
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://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.

Written by Mike Parker, James Youngman, and Paul Eggert.

C:\Chen\Mytools\coreutils-9.4\bin>expr ( 2 + 6 )
8

C:\Chen\Mytools\coreutils-9.4\bin>ls | grep 'whoami'
whoami.exe

C:\Chen\Mytools\coreutils-9.4\bin>whoami
Administrator

C:\Chen\Mytools\coreutils-9.4\bin>

注意:
因为我没有在MSYS环境安装最新版本的coreutils,所以在MSYS环境下仍是自带的coreutils-8.32版本。通过cmd命令,切换出MSYS环境,进行了如上验证。可以看到最新编译的coreutils-9.4版本中的expr、ls、grep、whoami命令可以正常使用。
完美~
另外可以将C:\Chen\Mytools\coreutils-9.4\bin> 添加到环境变量PATH中,这样就可以在cmd、powershell 的任何工作路径下使用新编译的coreutils工具包中的命令了(这里就不演示了)

三、最后&总结

最后,在我即将发布这篇文章的时候,我又看了一眼 MSYS2 软件包仓库的msys2-runtime、msys2-runtime-devel版本,已经更新到了 3.4.9 ,所以你们是幸福的,直接更新到 3.4.9 ,就不会遇到我前面遇到的第一个问题了。

Administrator@GC MSYS ~
$ pacman -Syu
:: Synchronizing package databases...
 clangarm64                                                                            1728.7 KiB   787 KiB/s 00:02 [####################################################################] 100%
 mingw32                                                                               1803.3 KiB  1088 KiB/s 00:02 [####################################################################] 100%
 mingw64                                                                               1944.2 KiB   921 KiB/s 00:02 [####################################################################] 100%
 ucrt64                                                                                1984.0 KiB   731 KiB/s 00:03 [####################################################################] 100%
 clang32                                                                               1781.6 KiB   838 KiB/s 00:02 [####################################################################] 100%
 clang64                                                                               1940.5 KiB  2.31 MiB/s 00:01 [####################################################################] 100%
 msys                                                                                   460.5 KiB   540 KiB/s 00:01 [####################################################################] 100%
:: Starting core system upgrade...
warning: terminate other MSYS2 programs before proceeding
resolving dependencies...
looking for conflicting packages...

Packages (2) msys2-runtime-3.4.9-1  msys2-runtime-devel-3.4.9-1

Total Download Size:    2.12 MiB
Total Installed Size:  10.08 MiB
Net Upgrade Size:       0.00 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
 msys2-runtime-devel-3.4.9-1-x86_64                                                     338.9 KiB   664 KiB/s 00:01 [####################################################################] 100%
 msys2-runtime-3.4.9-1-x86_64                                                          1834.9 KiB  3.22 MiB/s 00:01 [####################################################################] 100%
 Total (2/2)                                                                              2.1 MiB  3.60 MiB/s 00:01 [####################################################################] 100%
(2/2) checking keys in keyring                                                                                      [####################################################################] 100%
(2/2) checking package integrity                                                                                    [####################################################################] 100%
(2/2) loading package files                                                                                         [####################################################################] 100%
(2/2) checking for file conflicts                                                                                   [####################################################################] 100%
(2/2) checking available disk space                                                                                 [####################################################################] 100%
:: Processing package changes...
(1/2) upgrading msys2-runtime                                                                                       [####################################################################] 100%
(2/2) upgrading msys2-runtime-devel                                                                                 [####################################################################] 100%
:: To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]

最后总结:
在编译coreutils-9.4的过程中,虽然遇到了问题,中途几次都想放弃,但是最终还是找到了解决方案,在解决问题的过程中,收获蛮多的。比如:

  • 更切实的理解了,MSYS2 底层依赖了 Cygwin,对应的是 msys2-runtime、msys2-runtime-devel 包;
  • 可通过 https://packages.msys2.org/updates 查看软件包的详细信息,比如上述 coreutils 构建时依赖有哪些依赖,就是通过这个网站查到的。package/coreutils

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

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

相关文章

1.1 空间直角坐标系

1.空间直角坐标系的建立 三维空间中几何 空间图形形式 ----- 点 线 面 体 ↑ ↓ \uparrow\downarrow ↑↓ &#xff08;空间直角坐标系作为桥梁帮助我们理解&#xff09; 代数理论表达 — 坐标&#xff0c;方程&#xff08;组&#xff09; 2. 空间直角坐标系的定义 定义: 过…

Jmeter进阶使用指南-分布式测试

当你需要模拟大量并发用户并测试应用程序的性能时&#xff0c;JMeter的分布式测试功能非常有用。分布式测试允许你使用多个JMeter实例来模拟并发用户&#xff0c;从而提供更高的负载。 下面是一个详细的介绍和讲解分布式测试的步骤&#xff1a; 准备主机和从机&#xff1a; 首…

【代码随想录】Day 51 动态规划12 //待做//(买卖股票冷冻期、买卖股票手续费)

买卖股票冷冻期 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/ 买卖股票手续费 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/

【多思路附源码】2023高教社杯 国赛数学建模C题思路 - 蔬菜类商品的自动定价与补货决策

赛题介绍 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬…

LLM - Model、Data、Training、Generate Agruments 超参解析

目录 一.引言 二.常用参数 ◆ ModelArguments ◆ DataArguments ◆ TrainingArguments ◆ GeneratingArguments 三.代码实现 ◆ Python 代码 ◆ Shell 代码 四.总结 一.引言 LLM 相关训练框架都会引入 ModelArguments、DataArguments、TrainingArguments、Generatin…

MySQL 学习笔记

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 MySQL 学习笔记1、DQL 查询语句1.1、基本查询1.2、函数查询1.2.1、单行函数1.2.2、聚合函数 1.3、复杂查询1.3.1、连接查询1.3.2、子查询 1.4、SQL 语句 执行顺序 2、DDL 定义语句2.1、…

F. Selling a Menagerie Codeforces Round 895 (Div. 3)

Problem - F - Codeforces 题目大意&#xff1a;有n个动物&#xff0c;每个动物i有一个害怕的动物a[i]&#xff0c;现要卖掉所有动物&#xff0c;每个动物都有价值c[i]&#xff0c;如果i在a[i]之前卖掉&#xff0c;就会获得2*c[i]的价值&#xff0c;如果在a[i]之后被卖掉就会获…

垃圾回收 - 分代垃圾回收

分代垃圾回收在对象中导入了“年龄”的概念&#xff0c;通过优先回收容易成为垃圾的对象&#xff0c;提高垃圾回收的效率。 1、新生代对象和老年代对象 分代垃圾回收中把对象分类成几代&#xff0c;针对不同的代使用不同的 GC 算法&#xff0c;我们把刚生成的对象称为新生代对…

UI自动化测试详解

前言 随着智能化信息基础设施的推进&#xff0c;软件开发的进程也不断加快。软件测试工作也逐渐由传统的手工测试向软件自动化测试跨越。 对于很多企业来说&#xff0c;做好软件自动化测试工作已经不仅仅是通过测试工具进行“点点点”&#xff0c;要想找出软件测试过程中的缺…

python 小案例72

import requestsdef fetch_data_from_api(url):response requests.get(url)if response.status_code 200:data response.json()return dataelse:print("Failed to fetch data from API")return None# 使用NASA的API获取每日天文图片 url "https://api.nasa.…

【Springcloud】Actuator服务监控

【Springcloud】Actuator服务监控 【一】基本介绍【二】如何使用【三】端点分类【四】整合Admin-Ui【五】客户端配置【六】集成Nacos【七】登录认证【八】实时日志【九】动态日志【十】自定义通知 【一】基本介绍 &#xff08;1&#xff09;什么是服务监控 监视当前系统应用状…

情侣头像微信小程序源码 朋友圈背景小程序源码 动态壁纸微信小程序源码

壁纸和情侣头像&#xff0c;朋友圈素材都可以做&#xff0c;带视频教程。 搭建也不难&#xff0c;纯前端无后台。直接开发者工具调试前端&#xff0c;绑定合法域名&#xff0c;流量主功能也是在前端替换。 无需服务器域名直接上手&#xff01;&#xff01;&#xff01;

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要 1. 尾翼的贡献2. 垂尾是航向静稳定性的最大来源3. 推进系统对航向的贡献3.1 螺旋桨3.2 喷气式 4. 参考资料 1. 尾翼的贡献 平尾对航向静稳定性的影响机理与机翼相同&#xff0c;由于尺寸小&#xff0c;通…

AI教程 | 用Midjourney制作AI模特和换装的保姆级教程

Hi! 大家好&#xff0c;我是专注于AI项目实战的赤辰。 昨天电商朋友过来交流&#xff0c;聊到他最近新开了一家淘宝店&#xff0c;在没有请任何员工的情况下&#xff0c;他一个人用AI工具完成了店铺取名&#xff0c;商品文案&#xff0c;店铺logo&#xff0c;主图设计&#xf…

ASO优化之阅读并回复应用的评论

回复评论对于与用户保持牢固的关系非常重要。如果时间有限&#xff0c;优先回复负面评论&#xff0c;可以向其他用户保证&#xff0c;我们正在积极解决应用的问题&#xff0c;从而提高转化率。 1、逻辑与沟通要清晰。 首先&#xff0c;无论他们的反馈是正面还是负面&#xff0…

【c++】如何有效地利用命名空间?

​ &#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​✨人生如寄&#xff0c;多忧何为 ✨ 目录 前言什么是命名空间&#xff1f;命名空间的语法命名空间的使用避免命名冲突命名空间的嵌套总结 前言 当谈到C编…

51单片机-直流电机学习

简介 51单片机采用的是5V的直流电机 轴长&#xff1a;8mm 轴径&#xff1a;2mm 电压&#xff1a;1-6V 参考电流&#xff1a;0.35-0.4A 3V 转速&#xff1a;17000-18000 转每分钟 他的组成&#xff1a; 直流电机的结构应由 定子 和 转子 两大部分组成。 直流电机运行时静止…

【Spring】aop的底层原理

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理 Spring 中的切面编程aop的底层原理和重点注意的地方 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…

工作和生活中,如何用项目管理思维解决复杂的事情?

在工作和生活中&#xff0c;许多事情都可以采用项目思维方式来解决。当我们逐渐将工作和生活中的各种事务以项目的方式来处理和推进时&#xff0c;我们可能并没有意识到&#xff0c;实际上我们正在运用项目管理思维。 项目管理思维能帮助我们在面对繁杂事务时&#xff0c;理清…

DevOps到底是什么意思?

前言: 当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念。那么,到底什么是"DevOps"呢? 那么,DevOps是什么呢? 有人说它是一种方法,也有人说它是一种工具,还有人说它是一种思想。更有甚者,说它是一种哲学…