lfs(systemd版本)学习笔记-第2页
lfs(systemd)学习笔记-第1页 的地址:https://www.cnblogs.com/renren-study-notes/p/10385401.html
六.构建工具链
1.书中第五章节中构建的所有包不建议进行测试。
2.这时你的命令行或终端的环境应该是:
1.变量:export LFS=/mnt/lfs
2.已经挂载你为lfs创建的所有分区
3.切换到lfs用户。
第5.4章节
构建binutils包
1.根据上一章节的构建要求,首先进入$LFS/sources/目录
cd $LFS/sources/
2.解压Binutils包并进入binutils包的目录:
tar -xvf binutils-2.32.tar.xz
cd binutils-2.32
3.运行书中的构建过程
4.创建编译用的目录并进入
mkdir -v build
cd build
5.设置Binutils进行编译
../configure --prefix=/tools \
--with-sysroot=$LFS \
--with-lib-path=/tools/lib \
--target=$LFS_TGT \
--disable-nls \
--disable-werror
6.编译包
make -j8 (这里使用笔记1中的4.5章节所介绍的make -j(n)参数多线程编译)
7.如果构建x64的系统需要创建符号链接
case $(uname -m) in
x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
esac
8.安装包
make install
9.返回sources目录并删除binutils包的解压目录
cd $LFS/sources/ rm -rf binutils-2.32
第5.5章节
第一遍编译gcc
1.解压gcc并进入gcc的解压目录
tar -xvf gcc-8.2.0.tar.xz cd gcc-8.2.0
2.运行书中的编译安装过程
tar -xf ../mpfr-4.0.2.tar.xz
mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz
mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz
mv -v mpc-1.1.0 mpc for file in gcc/config/{linux,i386/linux{,64}}.h
do
cp -uv $file{,.orig}
sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
-e 's@/usr@/tools@g' $file.orig > $file
echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
touch $file.orig
done case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac mkdir -v build
cd build ../configure \
--target=$LFS_TGT \
--prefix=/tools \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--with-newlib \
--without-headers \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libmpx \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++ make -j8 make install
3.返回sources目录,并删除gcc的解压包目录。
cd $LFS/sources/ rm -rf gcc-8.2.0
第5.6章节
1.Linux API Headers在linux-4.18.5.tar.xz中,需要解压并操作的包是linux-4.18.5.tar.xz软件包。
2.解压linux包并进入linux的解压目录
tar -xvf linux-4.20.12.tar.xz cd linux-4.20.12
3.运行书中的编译命令
make mrproper make INSTALL_HDR_PATH=dest headers_install
cp -rv dest/include/* /tools/include
4.返回sources目录并删除linux的解压包
cd $LFS/sources/ rm -rf linux-4.20.12
第5.7章节
1.解压并进入glibc软件包的解压目录
tar -xvf glibc-2.29.tar.xz cd glibc-2.29
2.运行书中的编译安装命令
mkdir -v build
cd build
../configure \
--prefix=/tools \
--host=$LFS_TGT \
--build=$(../scripts/config.guess) \
--enable-kernel=3.2 \
--with-headers=/tools/include
make -j1 make install
3.执行完整性检查核对输出内容并清理测试文件
echo 'int main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep ': /tools' rm -v dummy.c a.out
4.返回sources目录并删除glibc目录
cd $LFS/sources/ rm -rf glibc-2.29
第5.8章节
1.Libstdc ++在gcc软件包中,解压gcc-8.2.0包,并进入gcc目录进行构建
tar -xvf gcc-8.2.0.tar.xz cd gcc-8.2.0
2.运行书中的编译安装命令
mkdir -v build
cd build ../libstdc++-v3/configure \
--host=$LFS_TGT \
--prefix=/tools \
--disable-multilib \
--disable-nls \
--disable-libstdcxx-threads \
--disable-libstdcxx-pch \
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/8.2.0 make -j8 make install
3.返回sources目录并删除解压包目录
cd $LFS/sources/ rm -rf gcc-8.2.0
第5.9章节
binutils的第二次编译安装
1.解压并进入binutils软件包目录
tar -xvf binutils-2.32.tar.xz cd binutils-2.32
2.运行书中的编译安装命令
mkdir -v build
cd build CC=$LFS_TGT-gcc \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../configure \
--prefix=/tools \
--disable-nls \
--disable-werror \
--with-lib-path=/tools/lib \
--with-sysroot make -j8 make install
3.准备链接
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
4.返回并删除binutils包
cd $LFS/sources/ rm -rf binutils-2.32
第5.10章节
gcc的第二次编译安装
1.解压并进入gcc包目录
tar -xvf gcc-8.2.0.tar.xz cd gcc-8.2.0
2.运行书中的编译安装命令,建立工具链并检查工具链
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h for file in gcc/config/{linux,i386/linux{,64}}.h
do
cp -uv $file{,.orig}
sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
-e 's@/usr@/tools@g' $file.orig > $file
echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
touch $file.orig
done case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac tar -xf ../mpfr-4.0.2.tar.xz
mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz
mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz
mv -v mpc-1.1.0 mpc mkdir -v build
cd build CC=$LFS_TGT-gcc \
CXX=$LFS_TGT-g++ \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../configure \
--prefix=/tools \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--enable-languages=c,c++ \
--disable-libstdcxx-pch \
--disable-multilib \
--disable-bootstrap \
--disable-libgomp make -j8 make install ln -sv gcc /tools/bin/cc echo 'int main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools' rm -v dummy.c a.out
3.返回sources目录并删除目录
cd $LFS/sources/ rm -rf gcc-8.2.0
第5.11章节
构建安装tcl
1.解压并进入tcl包
tar -xvf tcl8.6.9-src.tar.gz cd tcl8.6.9
2.按照书中的说明编译安装
cd unix
./configure --prefix=/tools make -j8 make install
3.配置tcl
chmod -v u+w /tools/lib/libtcl8.6.so make install-private-headers ln -sv tclsh8.6 /tools/bin/tclsh
4.返回sources目录并删除目录
cd $LFS/sources/ rm -rf tcl8.6.9
第5.12章节
编译安装expect包
1.解压并进入expect目录
tar -xvf expect5.45.4.tar.gz cd expect5.45.4
2.按照书中的编译说明进行编译安装
cp -v configure{,.orig}
sed 's:/usr/local/bin:/bin:' configure.orig > configure ./configure --prefix=/tools \
--with-tcl=/tools/lib \
--with-tclinclude=/tools/include make -j8 make SCRIPTS="" install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf expect5.45.4
第5.13章节
编译安装dejagnu包
1.解压并进入dejagnu包
tar -xvf dejagnu-1.6.2.tar.gz cd dejagnu-1.6.2
2.参照书中方法编译安装
./configure --prefix=/tools make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf dejagnu-1.6.2
第5.14章节
编译安装m4包
1.解压并进入m4包目录
tar -xvf m4-1.4.18.tar.xz cd m4-1.4.18
2.参照书中说明编译安装
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h ./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf m4-1.4.18
第5.15章节
编译安装ncurses包
1.解压并进入ncurses包
tar -xvf ncurses-6.1.tar.gz cd ncurses-6.1
2.参照书中说明编译安装
sed -i s/mawk// configure ./configure --prefix=/tools \
--with-shared \
--without-debug \
--without-ada \
--enable-widec \
--enable-overwrite make -j8
make install
ln -s libncursesw.so /tools/lib/libncurses.so
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf ncurses-6.1
第5.16章节
编译安装bash
1.解压并进入bash包目录
tar -xvf bash-5.0.tar.gz cd bash-5.0
2.参照书中内容编译安装
/configure --prefix=/tools --without-bash-malloc make -j8 make install ln -sv bash /tools/bin/sh
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf bash-5.0
第5.17章节
编译安装bison
1.解压并进入bison包目录
tar -xvf bison-3.3.2.tar.xz cd bison-3.3.2
2.参照书中内容编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf bison-3.3.2
第5.18章节
编译安装bzip2包
1.解压并进入bzip2包目录
tar -xvf bzip2-1.0.6.tar.gz cd bzip2-1.0.6
2.参照书中说明编译安装
make -j8 make PREFIX=/tools install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf bzip2-1.0.6
第5.19章节
编译安装coreutils包
1.解压并进入coreutils包目录
tar -xvf coreutils-8.30.tar.xz cd coreutils-8.30
2.参照书中说明编译安装
./configure --prefix=/tools --enable-install-program=hostname make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf coreutils-8.30
第5.20章节
编译安装diffutils包
1.解压并进入diffutils包目录
tar -xvf diffutils-3.7.tar.xz cd diffutils-3.7
2.参照书中内容编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf diffutils-3.7
第5.21章节
编译安装file包
1.解压并进入file包目录
tar -xvf file-5.36.tar.gz cd file-5.36
2.参照书中说明编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf file-5.36
第5.22章节
编译安装findutils包
1.解压并进入findutils包目录
tar -xvf findutils-4.6.0.tar.gz cd findutils-4.6.0
2.参照书中说明编译安装
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' gl/lib/*.c
sed -i '/unistd/a #include <sys/sysmacros.h>' gl/lib/mountlist.c
echo "#define _IO_IN_BACKUP 0x100" >> gl/lib/stdio-impl.h ./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf findutils-4.6.0
第5.23章节
编译安装gawk包
1.解压并进入gawk包目录
tar -xvf gawk-4.2.1.tar.xz cd gawk-4.2.1
2.参照书中的说明编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf gawk-4.2.1
第5.24章节
编译安装gettext包
1.解压并进入gettext包目录
tar -xvf gettext-0.19.8.1.tar.xz cd gettext-0.19.8.1
2.参照书中说明编译安装
cd gettext-tools
EMACS="no" ./configure --prefix=/tools --disable-shared make -C gnulib-lib
make -C intl pluralx.c
make -C src msgfmt
make -C src msgmerge
make -C src xgettext cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf gettext-0.19.8.1
第5.25章节
编译安装grep包
1.解压并进入grep包目录
tar -xvf grep-3.3.tar.xz cd grep-3.3
2.参照书中说明编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf grep-3.3
第5.26章节
编译安装gzip包
1.解压并进入gzip包目录
tar -xvf gzip-1.10.tar.xz cd gzip-1.10
2.参照书中说明编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf gzip-1.10
第5.27章节
编译安装make包
1.解压并进入make包目录
tar -xvf make-4.2.1.tar.bz2 cd make-4.2.1
2.参照书中说明编译安装
sed -i '211,217 d; 219,229 d; 232 d' glob/glob.c ./configure --prefix=/tools --without-guile make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf make-4.2.1
第5.28章节
编译安装patch包
1.解压并进入patch包
tar -xvf patch-2.7.6.tar.xz cd patch-2.7.6
2.参照书中说明编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf patch-2.7.6
第5.29章节
编译安装perl包
1.解压并进入perl包目录
tar -xvf perl-5.28.1.tar.xz cd perl-5.28.1
2.参照书中说明编译安装
sh Configure -des -Dprefix=/tools -Dlibs=-lm -Uloclibpth -Ulocincpth make -j8 cp -v perl cpan/podlators/scripts/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.28.1
cp -Rv lib/* /tools/lib/perl5/5.28.1
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf perl-5.28.1
第5.30章节
编译安装python包
1.解压并进入python包目录
tar -xvf Python-3.7.2.tar.xz cd Python-3.7.2
2.参照书中说明编译安装
sed -i '/def add_multiarch_paths/a \ return' setup.py
./configure --prefix=/tools --without-ensurepip make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf Python-3.7.2
第5.31章节
编译安装sed包
1.解压并进入sed包目录
tar -xvf sed-4.7.tar.xz cd sed-4.7
2.参照书中说明编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf sed-4.7
第5.32章节
编译安装tar包
1.解压并进入tar包目录
tar -xvf tar-1.31.tar.xz cd tar-1.31
2.参照书中说明编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf tar-1.31
第5.33章节
编译安装texinfo包
1.解压并进入texinfo包目录
tar -xvf texinfo-6.5.tar.xz cd texinfo-6.5
2.参照书中说明编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf texinfo-6.5
第5.34章节
编译安装util-linux包
1.解压并进入util-linux包目录
tar -xvf util-linux-2.33.1.tar.xz cd util-linux-2.33.1
2.参照书中内容编译安装
./configure --prefix=/tools \
--without-python \
--disable-makeinstall-chown \
--without-systemdsystemunitdir \
--without-ncurses \
PKG_CONFIG="" make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf util-linux-2.33.1
第5.35章节
编译安装xz包
1.解压并进入xz包目录
tar -xvf xz-5.2.4.tar.xz cd xz-5.2.4
2.参照书中内容编译安装
./configure --prefix=/tools make -j8 make install
3.返回sources目录并删除解压目录
cd $LFS/sources/ rm -rf xz-5.2.4
退出lfs用户,进入root用户
exit
第5.36章节
删除没有用的链接及文档(可选)
1.删除调试符号
strip --strip-debug /tools/lib/*
/usr/bin/strip --strip-unneeded /tools/{,s}bin/*
2.删除不需要的文件及文档
rm -rf /tools/{,share}/{info,man,doc}
find /tools/{lib,libexec} -name \*.la -delete
第5.37章节
改变文件所有权
1.将文件的所有权限改为root
chown -R root:root $LFS/tools
此时删除创建的lfs用户及用户组
1.运行以下命令删除用户和用户组
userdel -r lfs
第6.2章节
创建虚拟内核文件系统
mkdir -pv $LFS/{dev,proc,sys,run} mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3 mount -v --bind /dev $LFS/dev mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi
第6.4章节
进入chroot环境
chroot "$LFS" /tools/bin/env -i \
HOME=/root \
TERM="$TERM" \
PS1='(lfs chroot) \u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
/tools/bin/bash --login +h
第6.5章节
创建lfs系统的目录结构
mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt}
mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp
mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -v /usr/libexec
mkdir -pv /usr/{,local/}share/man/man{1..8} case $(uname -m) in
x86_64) mkdir -v /lib64 ;;
esac mkdir -v /var/{log,mail,spool}
ln -sv /run /var/run
ln -sv /run/lock /var/lock
mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}
第6.6章节
创建基本文件和符号
ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} /bin
ln -sv /tools/bin/{env,install,perl} /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib
for lib in blkid lzma mount uuid
do
ln -sv /tools/lib/lib$lib.so* /usr/lib
done
ln -svf /tools/include/blkid /usr/include
ln -svf /tools/include/libmount /usr/include
ln -svf /tools/include/uuid /usr/include
install -vdm755 /usr/lib/pkgconfig
for pc in blkid mount uuid
do
sed 's@tools@usr@g' /tools/lib/pkgconfig/${pc}.pc \
> /usr/lib/pkgconfig/${pc}.pc
done
ln -sv bash /bin/sh
ln -sv /proc/self/mounts /etc/mtab
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF
cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
nogroup:x:99:
users:x:999:
EOF
删除我没有名字的提示
exec /tools/bin/bash --login +h
创建登录日志文件
touch /var/log/{btmp,lastlog,faillog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664 /var/log/lastlog
chmod -v 600 /var/log/btmp
lfs(systemd版本)学习笔记-第3页 的地址:https://www.cnblogs.com/renren-study-notes/p/10385857.html
lfs(systemd版本)学习笔记-第2页的更多相关文章
- lfs(systemd版本)学习笔记-第3页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemd)学习笔记-第2页 的地址:https://www.cnblogs.com/renren-study-no ...
- lfs(systemd版本)学习笔记-第4页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemd版本)学习笔记-第3页 的地址:https://www.cnblogs.com/renren-study- ...
- lfs(systemd版本)学习笔记-第1页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一名linux爱好者,记录构建Linux From Scratch的过程 经博客园-骏马金龙前辈介绍,开始接触学习lfs,用博客 ...
- lfs(systemv版本)学习笔记-第1页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一名linux爱好者,记录构建Linux From Scratch的过程 经博客园-骏马金龙前辈介绍,开始接触学习lfs,用博客 ...
- lfs(systemv版本)学习笔记-第4页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemv版本)学习笔记第3页:https://www.cnblogs.com/renren-study-notes ...
- lfs(systemv版本)学习笔记-第3页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemv版本)学习笔记-第2页的地址:https://www.cnblogs.com/renren-study-n ...
- lfs(systemv版本)学习笔记-第2页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemv)学习笔记-第1页 的地址:https://www.cnblogs.com/renren-study-no ...
- 关于Angular.js Routing 的学习笔记(实现单页应用)
最近开始学习angular.js,发现angular.js确实很方便,也很强大.在看到 AngularJS Routing and Multiple Views 这一部分的时候,有点乱.现在通过记录一 ...
- react-router 4.0版本学习笔记
Router 所有路由组件的底层接口,一般情况都不使用,而是使用更加高级的路由. 最常用的有两种<BrowserRouter>.<HashRouter> <Browser ...
随机推荐
- word文档的python解析
主要两块,第一个是文件类型的转换,第二个是用docx包去对word文档中的table进行parse 1. 文件格式装换 因为很多各种各样的原因,至今还有一些word文档是doc的格式存的,对于这种,如 ...
- Javascript高级编程学习笔记(9)—— 执行环境
今天主要讲一下,JS底层的一些东西,这些东西不太好举例(应该是我水平不够) 望大家多多海涵,比心心 执行环境 执行环境(执行上下文,全文使用执行环境 )是JS中最为重要的一个概念,执行环境决定了,变量 ...
- 《机器学习实战(基于scikit-learn和TensorFlow)》第四章内容的学习心得
本章主要讲训练模型的方法. 线性回归模型 闭式方程:直接计算最适合训练集的模型参数 梯度下降:逐渐调整模型参数直到训练集上的成本函数调至最低,最终趋同与第一种方法计算出的参数 首先,给出线性回归模型的 ...
- python chr()和ord()的含义和使用方法
通过help 查看相关函数的帮助文档 >>>help (chr) chr(...) chr(i) -> character Return a string of one cha ...
- Spring Bean 的生命周期,如何被管理的?
定义 Bean是一个被实例化,组装,并通过Spring IOC容器(BeanFactory和ApplicationContext容器)所管理的对象. 作用域 Spring支持五个作用域,分别是sing ...
- laravel5实现第三方登录(微信)
背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAu ...
- C# log4net 使用
利用log4net写入异常类日志,在网上搜索一阵之后便想记录下来,以便后期使用,同时希望帮到大家. 第一步:使用管理NuGet程序包导入log4net.dll 导入成功后会在引用下显示相应的log4 ...
- 关于springboot aop 俩次调用的问题 aop多次调用
由于我在springboot 启动类中 给我的切面类进行了赋值 即@Bean 然而我在切面类中加了@Component 导致 springboot 注入了俩个 bean 所以导致 aop 多次执行 ...
- numpy中pad函数的常用方法
一.参数解释 ndarray = numpy.pad(array, pad_width, mode, **kwargs) array为要填补的数组 pad_width是在各维度的各个方向上想要填补的长 ...
- SQL Server性能优化(15)选择合适的索引
一.关于聚集索引列的选择(参考) 1. 聚集索引所在的列,或者列的组合最好是唯一的. 当我们创建的聚集索引的值不唯一时,SQL Server则无法仅仅通过聚集索引列(也就是关键字)唯一确定一行.此时, ...