交叉编译嵌入式linux平台的gdb工具

news2024/11/24 13:31:06

目录

前期准备:

开始编译:

配置编译环境:

配置交叉编译工具链:

创建交叉编译产物的目录:

termcap:

ncurses:

gmp:

gdb:

编译产物:


前期准备:

pc机系统:ubuntu系统

目标板的编译工具链:arm-openwrt-linux-gcc

嵌入式Linux目标板:R328

开始编译:

编译gdb工具,首先需要下载gdb的源代码,以及它依赖的其他开源库源码,包括ncurses,termcap和gmp。

配置编译环境:

$ sudo apt-get install bison flex expect-dev build-essential m4 autoconf automake texi2html

配置交叉编译工具链:

$ export PATH=$PATH:/home/guofeng/Workspace/myself/matrix/matrix/toolchains/r328-toolchain/toolchain-sunxi-musl/toolchain/bin

$ export STAGING_DIR=$STAGING_DIR:/home/guofeng/Workspace/myself/matrix/matrix/toolchains/r328-toolchain/toolchain-sunxi-musl/toolchain/bin

创建交叉编译产物的目录:

$ mkdir /home/guofeng/Workspace/gdb_cross_compile

termcap:

下载源码:

$ wget https://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz

解压后,进入到termcap的目录中

$ ./configure --prefix=/home/guofeng/Workspace/gdb_cross_compile/
$ vim Makefile

CC = gcc
AR = ar
RANLIB = ranlib

修改为:

CC = arm-openwrt-linux-gcc
AR = arm-openwrt-linux-ar
RANLIB = arm-openwrt-linux-ranlib

然后make,make install,会将交叉编译后的h文件,库文件,文档文件,copy到gdb_cross_compile文件夹的include,lib,info中。

make install会提示错误,它操作了/usr/include目录,但是又没有权限,直接忽略就好。

guofeng@ubuntu:~/Workspace/gdb_cross_compile/termcap-1.3.1$ make
arm-openwrt-linux-gcc -c  -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1  -DTERMCAP_FILE=\"/etc/termcap\" -I. -I. -g termcap.c
arm-openwrt-linux-gcc -c  -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1  -DTERMCAP_FILE=\"/etc/termcap\" -I. -I. -g tparam.c
tparam.c: In function 'memory_out':
tparam.c:51:3: warning: implicit declaration of function 'write' [-Wimplicit-function-declaration]
   write (2, "virtual memory exhausted\n", 25);
   ^~~~~
arm-openwrt-linux-gcc -c  -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1  -DTERMCAP_FILE=\"/etc/termcap\" -I. -I. -g version.c
arm-openwrt-linux-ar rc libtermcap.a termcap.o tparam.o version.o
arm-openwrt-linux-ranlib libtermcap.a
guofeng@ubuntu:~/Workspace/gdb_cross_compile/termcap-1.3.1$ make install
/bin/sh ./mkinstalldirs  /home/guofeng/Workspace/gdb_cross_compile//lib \
/home/guofeng/Workspace/gdb_cross_compile//include /home/guofeng/Workspace/gdb_cross_compile//info
mkdir /home/guofeng/Workspace/gdb_cross_compile/lib
mkdir /home/guofeng/Workspace/gdb_cross_compile/include
mkdir /home/guofeng/Workspace/gdb_cross_compile/info
/usr/bin/install -c -m 644 libtermcap.a /home/guofeng/Workspace/gdb_cross_compile//lib/libtermcap.a
arm-openwrt-linux-ranlib /home/guofeng/Workspace/gdb_cross_compile//lib/libtermcap.a
cd .; /usr/bin/install -c -m 644 termcap.h /home/guofeng/Workspace/gdb_cross_compile//include/termcap.h
cd .; test -z "/usr/include" || \
  /usr/bin/install -c -m 644 termcap.h /usr/include/termcap.h
/usr/bin/install: cannot remove '/usr/include/termcap.h': Permission denied
make: [Makefile:78: install] Error 1 (ignored)
cd .; for f in termcap.info*; \
do /usr/bin/install -c -m 644 $f /home/guofeng/Workspace/gdb_cross_compile//info/$f; done

guofeng@ubuntu:~/Workspace/gdb_cross_compile$ tree include/
include/
└── termcap.h

0 directories, 1 file
guofeng@ubuntu:~/Workspace/gdb_cross_compile$ tree lib/
lib/
└── libtermcap.a

0 directories, 1 file
guofeng@ubuntu:~/Workspace/gdb_cross_compile$ tree info/
info/
├── termcap.info
├── termcap.info-1
├── termcap.info-2
├── termcap.info-3
└── termcap.info-4

0 directories, 5 files

ncurses:

$ ./configure --prefix=/home/guofeng/Workspace/gdb_cross_compile/ --host=arm-openwrt-linux --with-shared

$ make

$ make install

$ wget https://ftp.gnu.org/gnu/ncurses/ncurses-6.4.tar.gz

guofeng@ubuntu:~/Workspace/gdb_cross_compile/ncurses-6.4$ ./configure --prefix=/home/guofeng/Workspace/gdb_cross_compile/ --host=arm-openwrt-linux --with-shared
configure: WARNING: If you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used.
checking for ggrep... no
checking for grep... grep
checking for egrep... grep -E
Configuring NCURSES 6.4 ABI 6 (Wed Sep  6 16:01:06 CST 2023)
checking for package version... 6.4
checking for package patch date... 20221231
checking build system type... x86_64-pc-linux-gnu
checking host system type... arm-openwrt-linux-gnu
checking target system type... arm-openwrt-linux-gnu
Configuring for linux-gnu
checking for fgrep... grep -F
checking for prefix... /home/guofeng/Workspace/gdb_cross_compile/
checking for arm-openwrt-linux-gnatgcc... no
checking for arm-openwrt-linux-gcc... arm-openwrt-linux-gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... yes
checking for executable suffix... 
checking for object suffix... o
checking whether we are using the GNU C compiler... yes
checking whether arm-openwrt-linux-gcc accepts -g... yes
checking version of arm-openwrt-linux-gcc... .
checking if this is really Intel C compiler... no
checking if this is really Clang C compiler... no
checking for arm-openwrt-linux-gcc option to accept ANSI C... none needed
checking $CFLAGS variable... ok
checking $CC variable... ok
checking how to run the C preprocessor... arm-openwrt-linux-gcc -E
checking whether arm-openwrt-linux-gcc needs -traditional... no
checking whether arm-openwrt-linux-gcc understands -c and -o together... yes
checking if you want to ensure bool is consistent with C++... yes
checking for arm-openwrt-linux-g++... arm-openwrt-linux-g++


guofeng@ubuntu:~/Workspace/gdb_cross_compile/ncurses-6.4$ make
( cd man && make DESTDIR="" RPATH_LIST="/home/guofeng/Workspace/gdb_cross_compile//lib" all )
make[1]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/ncurses-6.4/man'
/bin/sh ./MKterminfo.sh ./terminfo.head ./../include/Caps ./../include/Caps-ncurses ./terminfo.tail >terminfo.5
make[1]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/ncurses-6.4/man'
( cd include && make DESTDIR="" RPATH_LIST="/home/guofeng/Workspace/gdb_cross_compile//lib" all )
make[1]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/ncurses-6.4/include'
cat curses.head >curses.h
AWK=mawk /bin/sh ./MKkey_defs.sh ./Caps ./Caps-ncurses >>curses.h
/bin/sh -c 'if test "0" = "1" ; then cat ./curses.events >>curses.h ; fi'
/bin/sh -c 'if test "chtype" = "cchar_t" ; then cat ./curses.wide >>curses.h ; fi'
cat ./curses.tail >>curses.h
/bin/sh ./MKhashsize.sh ./Caps ./Caps-ncurses >hashsize.h
AWK=mawk /bin/sh ./MKncurses_def.sh ./ncurses_defs >ncurses_def.h
AWK=mawk /bin/sh ./MKparametrized.sh ./Caps ./Caps-ncurses >parametrized.h
touch config.h
mawk -f MKterm.h.awk ./Caps ./Caps-ncurses > term.h
/bin/sh ./edit_cfg.sh ../include/ncurses_cfg.h term.h
** edit: HAVE_TCGETATTR 1
** edit: HAVE_TERMIOS_H 1
** edit: HAVE_TERMIO_H 0
** edit: BROKEN_LINKER 0
make[1]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/ncurses-6.4/include'
( cd ncurses && make DESTDIR="" RPATH_LIST="/home/guofeng/Workspace/gdb_cross_compile//lib" all )
make[1]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/ncurses-6.4/ncurses'
mawk -f ./tinfo/MKcodes.awk bigstrings=1 ../include/Caps ../include/Caps-ncurses >codes.c
gcc -o make_hash -DHAVE_CONFIG_H -DUSE_BUILD_CC -I../ncurses -I. -I../include -I./../include   ./tinfo/make_hash.c  
/bin/sh -e ./tinfo/MKcaptab.sh mawk 1 ./tinfo/MKcaptab.awk ../include/Caps ../include/Caps-ncurses > comp_captab.c
/bin/sh -e ./tinfo/MKuserdefs.sh mawk 1 ../include/Caps ../include/Caps-ncurses > comp_userdefs.c
/bin/sh -e ./tty/MKexpanded.sh "arm-openwrt-linux-gcc -E" -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG > expanded.c
/bin/sh -e ./tinfo/MKfallback.sh /home/guofeng/Workspace/gdb_cross_compile//share/terminfo ../misc/terminfo.src "tic" "infocmp"  >fallback.c
FGREP="grep -F" /bin/sh -e ./base/MKlib_gen.sh "arm-openwrt-linux-gcc -E -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG" "mawk" generated <../include/curses.h >lib_gen.c
.. adding -P option to work around arm-openwrt-linux-gcc 6.4.1
AWK=mawk /bin/sh ./tinfo/MKkeys_list.sh ../include/Caps ../include/Caps-ncurses | LC_ALL=C sort >keys.list
mawk -f ./base/MKkeyname.awk bigstrings=1 keys.list > lib_keyname.c
FGREP="grep -F" /bin/sh -e ./base/MKlib_gen.sh "arm-openwrt-linux-gcc -E -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG" "mawk" implemented <../include/curses.h >link_test.c
.. adding -P option to work around arm-openwrt-linux-gcc 6.4.1
mawk -f ./tinfo/MKnames.awk bigstrings=1 ../include/Caps ../include/Caps-ncurses >names.c
echo | mawk -f ./base/MKunctrl.awk bigstrings=1 >unctrl.c
gcc -o make_keys -DHAVE_CONFIG_H -DUSE_BUILD_CC -I../ncurses -I. -I../include -I./../include   ./tinfo/make_keys.c  
./make_keys keys.list > init_keytry.h
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./tty/hardscroll.c -o ../obj_s/hardscroll.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./tty/hashmap.c -o ../obj_s/hashmap.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./base/lib_addch.c -o ../obj_s/lib_addch.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./base/lib_addstr.c -o ../obj_s/lib_addstr.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./base/lib_beep.c -o ../obj_s/lib_beep.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./base/lib_bkgd.c -o ../obj_s/lib_bkgd.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./base/lib_box.c -o ../obj_s/lib_box.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./base/lib_chgat.c -o ../obj_s/lib_chgat.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./base/lib_clear.c -o ../obj_s/lib_clear.o
arm-openwrt-linux-gcc -DHAVE_CONFIG_H -DBUILDING_NCURSES -I../ncurses -I. -I../include  -DNDEBUG -O2 --param max-inline-insns-single=1200  -fPIC -c ../ncurses/./base/lib_clearok.c -o ../obj_s/lib_clearok.o

guofeng@ubuntu:~/Workspace/gdb_cross_compile/ncurses-6.4$ make install
( cd man && make DESTDIR="" RPATH_LIST="/home/guofeng/Workspace/gdb_cross_compile//lib" install )
make[1]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/ncurses-6.4/man'
mkdir -p /home/guofeng/Workspace/gdb_cross_compile//share/man
/bin/sh ../edit_man.sh normal installing /home/guofeng/Workspace/gdb_cross_compile//share/man . terminfo.5 *-config.1 ./*.[0-9]*
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man5/terminfo.5.gz
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man1/ncurses6-config.1.gz
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man1/captoinfo.1.gz
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man1/clear.1.gz
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man3/add_wch.3ncurses.gz
.. installing alias echo_wchar.3ncurses.gz
.. installing alias mvadd_wch.3ncurses.gz
.. installing alias mvwadd_wch.3ncurses.gz
.. installing alias wadd_wch.3ncurses.gz
.. installing alias wecho_wchar.3ncurses.gz
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man3/add_wchstr.3ncurses.gz
.. installing alias add_wchnstr.3ncurses.gz
.. installing alias mvadd_wchnstr.3ncurses.gz
.. installing alias mvadd_wchstr.3ncurses.gz
.. installing alias mvwadd_wchnstr.3ncurses.gz
.. installing alias mvwadd_wchstr.3ncurses.gz
.. installing alias wadd_wchnstr.3ncurses.gz
.. installing alias wadd_wchstr.3ncurses.gz
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man3/addch.3ncurses.gz
.. installing alias echochar.3ncurses.gz
.. installing alias mvaddch.3ncurses.gz
.. installing alias mvwaddch.3ncurses.gz
.. installing alias waddch.3ncurses.gz
.. installing alias wechochar.3ncurses.gz
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man3/addchstr.3ncurses.gz
.. installing alias addchnstr.3ncurses.gz
.. installing alias mvaddchnstr.3ncurses.gz
.. installing alias mvaddchstr.3ncurses.gz
.. installing alias mvwaddchnstr.3ncurses.gz
.. installing alias mvwaddchstr.3ncurses.gz
.. installing alias waddchnstr.3ncurses.gz
.. installing alias waddchstr.3ncurses.gz
installing /home/guofeng/Workspace/gdb_cross_compile//share/man/man3/addstr.3ncurses.gz


guofeng@ubuntu:~/Workspace/gdb_cross_compile$ tree include/
include/
├── ncurses
│   ├── curses.h
│   ├── nc_tparm.h
│   ├── ncurses_dll.h
│   ├── ncurses.h -> curses.h
│   ├── termcap.h
│   ├── term_entry.h
│   ├── term.h
│   ├── tic.h
│   └── unctrl.h
└── termcap.h

1 directory, 10 files
guofeng@ubuntu:~/Workspace/gdb_cross_compile$ tree info/
info/
├── termcap.info
├── termcap.info-1
├── termcap.info-2
├── termcap.info-3
└── termcap.info-4

0 directories, 5 files
guofeng@ubuntu:~/Workspace/gdb_cross_compile$ tree lib/
lib/
├── libncurses.a
├── libncurses_g.a
├── libncurses.so -> libncurses.so.6
├── libncurses.so.6 -> libncurses.so.6.4
├── libncurses.so.6.4
└── libtermcap.a

0 directories, 6 files
guofeng@ubuntu:~/Workspace/gdb_cross_compile$ 

gmp:

如果没有编译gmp,那么在编译gdb时,会报错。

$ ./configure --prefix=/home/guofeng/Workspace/gdb_cross_compile/ --host=arm-openwrt-linux

$ make

$ make install

$ wget --no-check-certificate "https://gmplib.org/download/gmp/gmp-6.2.1.tar

$ ./configure --prefix=/home/guofeng/Workspace/gdb_cross_compile/ --host=arm-openwrt-linux

checking build system type... nehalem-pc-linux-gnu
checking host system type... arm-openwrt-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-openwrt-linux-strip... arm-openwrt-linux-strip
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking ABI=32
checking compiler arm-openwrt-linux-gcc -O2 -pedantic -fomit-frame-pointer ... yes
checking whether ARM gcc unsigned division works... yes
checking compiler arm-openwrt-linux-gcc -O2 -pedantic -fomit-frame-pointer  -march=armv4... yes
checking for arm-openwrt-linux-gcc... arm-openwrt-linux-gcc
...
...
...
config.status: linking mpn/arm/invert_limb.asm to mpn/invert_limb.asm
config.status: linking mpn/arm/aorslsh1_n.asm to mpn/addlsh1_n.asm
config.status: linking mpn/arm/aorslsh1_n.asm to mpn/sublsh1_n.asm
config.status: linking mpn/arm/rsh1aors_n.asm to mpn/rsh1add_n.asm
config.status: linking mpn/arm/rsh1aors_n.asm to mpn/rsh1sub_n.asm
config.status: linking mpn/generic/add_n_sub_n.c to mpn/add_n_sub_n.c
config.status: linking mpn/arm/gmp-mparam.h to gmp-mparam.h
config.status: executing libtool commands
configure: summary of build options:

  Version:           GNU MP 6.2.1
  Host type:         arm-openwrt-linux-gnu
  ABI:               32
  Install prefix:    /home/guofeng/Workspace/gdb_cross_compile
  Compiler:          arm-openwrt-linux-gcc
  Static libraries:  yes
  Shared libraries:  yes



guofeng@ubuntu:~/Workspace/gdb_cross_compile/gmp-6.2.1$ make
make  all-recursive
make[1]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'
Making all in tests
make[2]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests'
Making all in .
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests'
Making all in devel
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/devel'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/devel'
Making all in mpn
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpn'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpn'
Making all in mpz
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpz'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpz'
Making all in mpq
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpq'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpq'
Making all in mpf
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpf'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpf'
Making all in rand
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/rand'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/rand'
Making all in misc
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/misc'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/misc'
Making all in cxx
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/cxx'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/cxx'
......
sqrtrem.o .libs/libgmp.lax/lt87-sizeinbase.o .libs/libgmp.lax/lt88-get_str.o .libs/libgmp.lax/lt89-set_str.o mpn/compute_powtab.o .libs/libgmp.lax/lt90-scan0.o .libs/libgmp.lax/lt91-scan1.o .libs/libgmp.lax/lt92-popcount.o .libs/libgmp.lax/lt93-hamdist.o .libs/libgmp.lax/lt94-cmp.o mpn/zero_p.o .libs/libgmp.lax/lt95-perfsqr.o .libs/libgmp.lax/lt96-perfpow.o mpn/strongfibo.o mpn/gcd_11.o mpn/gcd_22.o mpn/gcd_1.o .libs/libgmp.lax/lt97-gcd.o mpn/gcdext_1.o .libs/libgmp.lax/lt98-gcdext.o mpn/gcd_subdiv_step.o mpn/gcdext_lehmer.o mpn/div_q.o .libs/libgmp.lax/lt99-tdiv_qr.o mpn/jacbase.o mpn/jacobi_2.o .libs/libgmp.lax/lt100-jacobi.o .libs/libgmp.lax/lt101-get_d.o mpn/matrix22_mul.o mpn/matrix22_mul1_inverse_vector.o mpn/hgcd_matrix.o mpn/hgcd2.o mpn/hgcd_step.o mpn/hgcd_reduce.o mpn/hgcd.o mpn/hgcd_appr.o mpn/hgcd2_jacobi.o mpn/hgcd_jacobi.o mpn/mullo_n.o mpn/mullo_basecase.o mpn/sqrlo.o mpn/sqrlo_basecase.o mpn/toom22_mul.o mpn/toom32_mul.o mpn/toom42_mul.o mpn/toom52_mul.o mpn/toom62_mul.o mpn/toom33_mul.o mpn/toom43_mul.o mpn/toom53_mul.o mpn/toom54_mul.o mpn/toom63_mul.o mpn/toom44_mul.o mpn/toom6h_mul.o mpn/toom6_sqr.o mpn/toom8h_mul.o mpn/toom8_sqr.o mpn/toom_couple_handling.o mpn/toom2_sqr.o mpn/toom3_sqr.o mpn/toom4_sqr.o mpn/toom_eval_dgr3_pm1.o mpn/toom_eval_dgr3_pm2.o mpn/toom_eval_pm1.o mpn/toom_eval_pm2.o mpn/toom_eval_pm2exp.o mpn/toom_eval_pm2rexp.o mpn/toom_interpolate_5pts.o mpn/toom_interpolate_6pts.o mpn/toom_interpolate_7pts.o mpn/toom_interpolate_8pts.o mpn/toom_interpolate_12pts.o mpn/toom_interpolate_16pts.o mpn/invertappr.o .libs/libgmp.lax/lt102-invert.o mpn/binvert.o mpn/mulmod_bnm1.o mpn/sqrmod_bnm1.o mpn/div_qr_1.o mpn/div_qr_1n_pi1.o mpn/div_qr_2.o mpn/div_qr_2n_pi1.o mpn/div_qr_2u_pi1.o mpn/sbpi1_div_q.o mpn/sbpi1_div_qr.o mpn/sbpi1_divappr_q.o mpn/dcpi1_div_q.o mpn/dcpi1_div_qr.o mpn/dcpi1_divappr_q.o mpn/mu_div_qr.o mpn/mu_divappr_q.o mpn/mu_div_q.o mpn/bdiv_q_1.o mpn/sbpi1_bdiv_q.o mpn/sbpi1_bdiv_qr.o mpn/sbpi1_bdiv_r.o mpn/dcpi1_bdiv_q.o mpn/dcpi1_bdiv_qr.o mpn/mu_bdiv_q.o mpn/mu_bdiv_qr.o mpn/bdiv_q.o mpn/bdiv_qr.o mpn/broot.o mpn/brootinv.o mpn/bsqrt.o mpn/bsqrtinv.o .libs/libgmp.lax/lt103-divexact.o mpn/bdiv_dbm1c.o mpn/redc_1.o mpn/redc_2.o mpn/redc_n.o .libs/libgmp.lax/lt104-powm.o mpn/powlo.o mpn/sec_powm.o mpn/sec_mul.o mpn/sec_sqr.o mpn/sec_div_qr.o mpn/sec_div_r.o mpn/sec_pi1_div_qr.o mpn/sec_pi1_div_r.o mpn/sec_add_1.o mpn/sec_sub_1.o mpn/sec_invert.o mpn/trialdiv.o .libs/libgmp.lax/lt105-remove.o mpn/and_n.o mpn/andn_n.o mpn/nand_n.o mpn/ior_n.o mpn/iorn_n.o mpn/nior_n.o mpn/xor_n.o mpn/xnor_n.o mpn/copyi.o mpn/copyd.o mpn/zero.o mpn/sec_tabselect.o mpn/comb_tables.o mpn/udiv.o mpn/invert_limb.o mpn/addlsh1_n.o mpn/sublsh1_n.o mpn/rsh1add_n.o mpn/rsh1sub_n.o mpn/add_n_sub_n.o printf/asprintf.o printf/asprntffuns.o printf/doprnt.o printf/doprntf.o printf/doprnti.o printf/fprintf.o printf/obprintf.o printf/obvprintf.o printf/obprntffuns.o printf/printf.o printf/printffuns.o printf/snprintf.o printf/snprntffuns.o printf/sprintf.o printf/sprintffuns.o printf/vasprintf.o printf/vfprintf.o printf/vprintf.o printf/vsnprintf.o printf/vsprintf.o printf/repl-vsnprintf.o scanf/doscan.o scanf/fscanf.o scanf/fscanffuns.o scanf/scanf.o scanf/sscanf.o scanf/sscanffuns.o scanf/vfscanf.o scanf/vscanf.o scanf/vsscanf.o rand/rand.o rand/randclr.o rand/randdef.o rand/randiset.o rand/randlc2s.o rand/randlc2x.o rand/randmt.o rand/randmts.o rand/rands.o rand/randsd.o rand/randsdui.o rand/randbui.o rand/randmui.o
libtool: link: arm-openwrt-linux-ranlib .libs/libgmp.a
libtool: link: rm -fr .libs/libgmp.lax
libtool: link: ( cd ".libs" && rm -f "libgmp.la" && ln -s "../libgmp.la" "libgmp.la" )
make[2]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'
make[1]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'




$ make install
guofeng@ubuntu:~/Workspace/gdb_cross_compile/gmp-6.2.1$ make install
make  install-recursive
make[1]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'
Making install in tests
make[2]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests'
Making install in .
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests'
make[4]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests'
make[4]: Nothing to be done for 'install-exec-am'.
make[4]: Nothing to be done for 'install-data-am'.
make[4]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests'
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests'
Making install in devel
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/devel'
make[4]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/devel'
make[4]: Nothing to be done for 'install-exec-am'.
make[4]: Nothing to be done for 'install-data-am'.
make[4]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/devel'
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/devel'
Making install in mpn
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpn'
make[4]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1/tests/mpn'
...
...
...
----------------------------------------------------------------------
Libraries have been installed in:
   /home/guofeng/Workspace/gdb_cross_compile/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
 /usr/bin/mkdir -p '/home/guofeng/Workspace/gdb_cross_compile/include'
 /usr/bin/install -c -m 644 gmp.h '/home/guofeng/Workspace/gdb_cross_compile/include'
 /usr/bin/mkdir -p '/home/guofeng/Workspace/gdb_cross_compile/lib/pkgconfig'
 /usr/bin/install -c -m 644 gmp.pc '/home/guofeng/Workspace/gdb_cross_compile/lib/pkgconfig'
make  install-data-hook
make[4]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'

+-------------------------------------------------------------+
| CAUTION:                                                    |
|                                                             |
| If you have not already run "make check", then we strongly  |
| recommend you do so.                                        |
|                                                             |
| GMP has been carefully tested by its authors, but compilers |
| are all too often released with serious bugs.  GMP tends to |
| explore interesting corners in compilers and has hit bugs   |
| on quite a few occasions.                                   |
|                                                             |
+-------------------------------------------------------------+

make[4]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'
make[2]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'
make[1]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gmp-6.2.1'

gdb:

下载源码,可以去官网下载最新release版本,也可以复制下面的gdb的ftp地址。

官网:GDB: The GNU Project Debugger (sourceware.org)icon-default.png?t=N7T8https://www.sourceware.org/gdb/

$ wget https://ftp.gnu.org/gnu/gdb/gdb-13.2.tar.xz

$ ./configure --host=arm-openwrt-linux --target=arm-openwrt-linux --prefix=/home/guofeng/Workspace/gdb_cross_compile --enable-static LDFLAGS="-L/home/guofeng/Workspace/gdb_cross_compile/lib" CFLAGS="-I/home/guofeng/Workspace/gdb_crocess_compile/include"

$ make

$ make install

guofeng@ubuntu:~/Workspace/gdb_cross_compile/gdb-13.2$ ./configure --host=arm-openwrt-linux --target=arm-openwrt-linux --prefix=/home/guofeng/Workspace/gdb_cross_compile --enable-static LDFLAGS="-L/home/guofeng/Workspace/gdb_cross_compile/lib" CFLAGS="-I/home/guofeng/Workspace/gdb_crocess_compile/include"
checking build system type... x86_64-pc-linux-gnu
checking host system type... arm-openwrt-linux-gnu
checking target system type... arm-openwrt-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /usr/bin/sed
checking for gawk... no
checking for mawk... mawk
checking for gdbserver support... yes
checking for arm-openwrt-linux-gcc... arm-openwrt-linux-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether arm-openwrt-linux-gcc accepts -g... yes
checking for arm-openwrt-linux-gcc option to accept ISO C89... none needed


guofeng@ubuntu:~/Workspace/gdb_cross_compile/gdb-13.2$ make
make[1]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2'
Configuring in ./libiberty
configure: loading cache ./config.cache
checking whether to enable maintainer-specific portions of Makefiles... no
checking for makeinfo... (cached) /home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/missing makeinfo --split-size=5000000
configure: WARNING:
*** Makeinfo is missing. Info documentation will not be built.
checking for perl... (cached) perl
checking build system type... (cached) x86_64-pc-linux-gnu
checking host system type... (cached) arm-openwrt-linux-gnu
checking for arm-openwrt-linux-ar... (cached) arm-openwrt-linux-ar 
checking for arm-openwrt-linux-ranlib... (cached) arm-openwrt-linux-ranlib 
checking for -plugin option... checking for arm-openwrt-linux-ar... (cached) arm-openwrt-linux-ar 
arm-openwrt-linux-ar: no operation specified
configure: WARNING: Failed: arm-openwrt-linux-ar  --plugin /home/guofeng/Workspace/myself/matrix/matrix/toolchains/r328-toolchain/toolchain-sunxi-musl/toolchain/bin/../libexec/gcc/arm-openwrt-linux-muslgnueabi/6.4.1/liblto_plugin.so rc
no
checking whether to install libiberty headers and static library... no
configure: target_header_dir = 
checking for arm-openwrt-linux-gcc... (cached) arm-openwrt-linux-gcc
......
......
touch stamp-guile
rm -rf ./system-gdbinit
mkdir ./system-gdbinit
files='elinos.py wrs-linux.py' ; \
for file in $files ; do \
  f=./../system-gdbinit/$file ; \
  if test -f $f ; then \
    /usr/bin/install -c -m 644 $f ./system-gdbinit ; \
  fi ; \
done
touch stamp-system-gdbinit
make[4]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/gdb/data-directory'
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/gdb'
make[2]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/gdb'
make[1]: Nothing to be done for 'all-target'.
make[1]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2


guofeng@ubuntu:~/Workspace/gdb_cross_compile/gdb-13.2$ make install
make[1]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2'
/bin/bash ./mkinstalldirs /home/guofeng/Workspace/gdb_cross_compile /home/guofeng/Workspace/gdb_cross_compile
make[2]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/libsframe'
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/libsframe'
 /usr/bin/mkdir -p '/home/guofeng/Workspace/gdb_cross_compile/share/info'
 /usr/bin/install -c -m 644 ./doc/sframe-spec.info '/home/guofeng/Workspace/gdb_cross_compile/share/info'
 install-info --info-dir='/home/guofeng/Workspace/gdb_cross_compile/share/info' '/home/guofeng/Workspace/gdb_cross_compile/share/info/sframe-spec.info'
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/libsframe'
make[2]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/libsframe'
make[2]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/bfd'
make  install-recursive
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/bfd'
Making install in po
make[4]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/bfd/po'
if test -r .././../mkinstalldirs; then \
  .././../mkinstalldirs /home/guofeng/Workspace/gdb_cross_compile/share; \
else \
  ../mkinstalldirs /home/guofeng/Workspace/gdb_cross_compile/share; \
fi
mkdir -p -- /home/guofeng/Workspace/gdb_cross_compile/share/locale/da/LC_MESSAGES
installing da.gmo as /home/guofeng/Workspace/gdb_cross_compile/share/locale/da/LC_MESSAGES/bfd.mo
mkdir -p -- /home/guofeng/Workspace/gdb_cross_compile/share/locale/es/LC_MESSAGES
installing es.gmo as /home/guofeng/Workspace/gdb_cross_compile/share/locale/es/LC_MESSAGES/bfd.mo
mkdir -p -- /home/guofeng/Workspace/gdb_cross_compile/share/locale/fi/LC_MESSAGES
installing fi.gmo as /home/guofeng/Workspace/gdb_cross_compile/share/locale/fi/LC_MESSAGES/bfd.mo
mkdir -p -- /home/guofeng/Workspace/gdb_cross_compile/share/locale/fr/LC_MESSAGES
installing fr.gmo as /home/guofeng/Workspace/gdb_cross_compile/share/locale/fr/LC_MESSAGES/bfd.mo
mkdir -p -- /home/guofeng/Workspace/gdb_cross_compile/share/locale/hr/LC_MESSAGES
installing hr.gmo as /home/guofeng/Workspace/gdb_cross_compile/share/locale/hr/LC_MESSAGES/bfd.mo
mkdir -p -- /home/guofeng/Workspace/gdb_cross_compile/share/locale/id/LC_MESSAGES
installing id.gmo as /home/guofeng/Workspace/gdb_cross_compile/share/locale/id/LC_MESSAGES/bfd.mo
mkdir -p -- /home/guofeng/Workspace/gdb_cross_compile/share/locale/ja/LC_MESSAGES
installing ja.gmo as /home/guofeng/Workspace/gdb_cross_compile/share/locale/ja/LC_MESSAGES/bfd.mo
mkdir -p -- /home/guofeng/Workspace/gdb_cross_compile/share/locale/pt/LC_MESSAGES
......
......
......
......
......
......
......
make[6]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/gdb/data-directory'
make[5]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/gdb/data-directory'
make[4]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/gdb'
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/gdb'
make[2]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/gdb'
make[2]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/libctf'
make[3]: Entering directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/libctf'
 /usr/bin/mkdir -p '/home/guofeng/Workspace/gdb_cross_compile/lib'
 /bin/bash ./libtool   --mode=install /usr/bin/install -c   libctf.la libctf-nobfd.la '/home/guofeng/Workspace/gdb_cross_compile/lib'
libtool: install: /usr/bin/install -c .libs/libctf.lai /home/guofeng/Workspace/gdb_cross_compile/lib/libctf.la
libtool: install: /usr/bin/install -c .libs/libctf-nobfd.lai /home/guofeng/Workspace/gdb_cross_compile/lib/libctf-nobfd.la
libtool: install: /usr/bin/install -c .libs/libctf.a /home/guofeng/Workspace/gdb_cross_compile/lib/libctf.a
libtool: install: chmod 644 /home/guofeng/Workspace/gdb_cross_compile/lib/libctf.a
libtool: install: arm-openwrt-linux-ranlib  --plugin /home/guofeng/Workspace/myself/matrix/matrix/toolchains/r328-toolchain/toolchain-sunxi-musl/toolchain/bin/../libexec/gcc/arm-openwrt-linux-muslgnueabi/6.4.1/liblto_plugin.so /home/guofeng/Workspace/gdb_cross_compile/lib/libctf.a
libtool: install: /usr/bin/install -c .libs/libctf-nobfd.a /home/guofeng/Workspace/gdb_cross_compile/lib/libctf-nobfd.a
libtool: install: chmod 644 /home/guofeng/Workspace/gdb_cross_compile/lib/libctf-nobfd.a
libtool: install: arm-openwrt-linux-ranlib  --plugin /home/guofeng/Workspace/myself/matrix/matrix/toolchains/r328-toolchain/toolchain-sunxi-musl/toolchain/bin/../libexec/gcc/arm-openwrt-linux-muslgnueabi/6.4.1/liblto_plugin.so /home/guofeng/Workspace/gdb_cross_compile/lib/libctf-nobfd.a
libtool: finish: PATH="/home/guofeng/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/guofeng/.local/bin:/home/guofeng/Workspace/myself/matrix/matrix/toolchains/r328-toolchain/toolchain-sunxi-musl/toolchain/bin:/sbin" ldconfig -n /home/guofeng/Workspace/gdb_cross_compile/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /home/guofeng/Workspace/gdb_cross_compile/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
 /usr/bin/mkdir -p '/home/guofeng/Workspace/gdb_cross_compile/include'
 /usr/bin/install -c -m 644 ./../include/ctf.h ./../include/ctf-api.h '/home/guofeng/Workspace/gdb_cross_compile/include'
 /usr/bin/mkdir -p '/home/guofeng/Workspace/gdb_cross_compile/share/info'
 /usr/bin/install -c -m 644 ./doc/ctf-spec.info '/home/guofeng/Workspace/gdb_cross_compile/share/info'
 install-info --info-dir='/home/guofeng/Workspace/gdb_cross_compile/share/info' '/home/guofeng/Workspace/gdb_cross_compile/share/info/ctf-spec.info'
make[3]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/libctf'
make[2]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2/libctf'
make[1]: Nothing to be done for 'install-target'.
make[1]: Leaving directory '/home/guofeng/Workspace/gdb_cross_compile/gdb-13.2'



编译产物:

编译的产物,在gdb_cross_compile文件夹的bin目录中,在该目录中可以找到gcore,gdb,gdbserver等工具,需要主要的是,gdb文件是依赖so的(依赖libgmp.so和libncurses.so),实际使用时需要将这两个so复制到目标板上,同时配置export LD_LIBRARY_PATH=so文件存放路径。

然后就可以在目标板上运行gdb了。

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

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

相关文章

IT设备监控软件有哪些功能

IT设备监控软件通常可以实现以下功能&#xff1a;  设备状态监控&#xff1a;可以实时监测IT设备的运行状态&#xff0c;如设备的温度、湿度、风扇转速等&#xff0c;以及设备的开机、关机、重启等事件。  性能指标监控&#xff1a;可以监测IT设备的各项性能指标&#xff0…

rtthread下spi device架构MCP25625驱动

1.CAN驱动架构 由于采用了RTT的spi device架构&#xff0c;不能再随心所遇的编写CAN驱动 了&#xff0c;之前内核虽然采用了RTT内核&#xff0c;但是驱动并没有严格严格按RTT推荐的架构来做&#xff0c;这次不同了&#xff0c;上次是因为4个MCP25625挂在了4路独立的SPI总线上&…

前端(十六)——Web应用的安全性研究

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;Web应用的安全性研究 文章目录 概述常见前端安全漏洞XSS&#xff08;跨站脚本攻击&#xff09;CSRF&#xff08;跨站请求伪造&#xff09; 点击劫持安全性验证与授权用户身份验证授权与权限管理 安全…

“搭载超快闪充、续航自由、天玑8200性能” iQOO Z8系列发布

近日&#xff0c;“天玑 8200 性能小超人”iQOO Z8系列正式发布&#xff0c;包括iQOO Z8和iQOO Z8x两款产品&#xff0c;首销售价1199元起。 “天玑 8200 性能小超人”iQOO Z8倾力打造“最佳千元性能机”&#xff1a;搭载具备巅峰性能的天玑 8200 &#xff0c;携手满血版LPDDR…

熵 | 无线通信知识

文章目录 一、信息论&#xff08;熵、联合熵、条件熵&#xff09;二、Bernoulli熵三、联合熵和条件熵四、互信息五、相对熵(KL距离)常需要的不等式公式 一、信息论&#xff08;熵、联合熵、条件熵&#xff09; 熵定义&#xff1a; H ( X ) E [ − l o g 2 p ( x ) ] − ∑ x…

【算法|链表】移除链表元素

算法|链表-移除链表元素 关于链表的介绍以及相关实现操作&#xff0c;见单链表&#xff0c;双链表 leetcode 203 移除链表元素 题意&#xff1a;删除链表中等于给定值 val 的所有节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1…

Unity3D之动态生成指定数量带间隔的地面

文章目录 准备代码实现实现效果 准备 空物体生成脚本地面预制体 代码实现 using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine;public class CreateGround : MonoBehaviour {[SerializeField]public i…

多功能透明屏,在智能家居领域中,有哪些功能特点?显示、连接

多功能透明屏是一种新型的显示技术&#xff0c;它能够在透明的表面上显示图像和视频&#xff0c;并且具有多种功能。 这种屏幕可以应用于各种领域&#xff0c;如商业广告、智能家居、教育等&#xff0c;为用户提供更加便捷和多样化的体验。 首先&#xff0c;多功能透明屏可以…

NIFI关于Parameter Contexts的使用

说明 nifi版本&#xff1a;1.23.2&#xff08;docker镜像&#xff09; 作用 Parameter Contexts&#xff08;参数上下文&#xff09;&#xff1a;参数上下文由 NiFi 实例全局定义/访问。访问策略可以应用于参数上下文&#xff0c;以确定哪些用户可以创建它们。创建后&#x…

CRM系统中的工作流管理及其重要性

工作流是CRM系统中较为常见的功能&#xff0c;它可以有效减少重复工作、提高销售效率。如果您想深入了解&#xff0c;本文就来详细说说&#xff0c;CRM工作流是什么&#xff1f;工作流的作用&#xff1f; 什么是CRM工作流&#xff1f; CRM工作流是指在CRM系统中&#xff0c;根…

Python编程的八大魔法库

Python是一门广受欢迎的编程语言&#xff0c;其生态系统丰富多彩&#xff0c;拥有许多令人惊叹的依赖库&#xff0c;可以帮助程序员们在各种领域中创造出令人瞠目结舌的应用。在这篇文章中&#xff0c;我们将探讨Python编程的十大神奇依赖库&#xff0c;它们像魔法一样&#xf…

3.运行项目

克隆项目 使用安装的git克隆vue2版本的若依项目&#xff0c;博主使用的版本是3.8.6. git clone https://gitee.com/y_project/RuoYi-Vue.git目录结构如下图所示&#xff0c;其中ruoyi-ui是前端的内容&#xff0c;其它均为后端的内容。 配置mysql数据库 在数据库里新建一个…

实体门店如何变“流量”为“存量”门店数字化积分体系如何设计?

随着各行各业特别是实体商家对于数字化工具的广泛使用&#xff0c;积分系统对于实体客户的留存、转化相较于其他营销手段&#xff0c;拥有更好的数据反馈。简单而言&#xff0c;积分指的是在某个平台上流通的虚拟数值&#xff0c;可以辅助平台提升活动运营效果&#xff0c;提升…

Python 操作 Word

上次给大家介绍了 Python 如何操作 Excel &#xff0c;是不是感觉还挺有趣的&#xff0c;今天为大家再介绍下&#xff0c;用 Python 如何操作 Word &#xff0c;这个可能跟数据处理关系不大&#xff0c;用的也不多&#xff0c;不过可以先了解下都能实现什么功能&#xff0c;以备…

阿里巴巴国际站测评补单有哪些优势,需要哪些技术要求

阿里巴巴国际站买家复购等销售指标就成为了判断你这个产品是否能大卖的第一标准。判断后的潜力大就给你更多的流量&#xff0c;潜力小则排名靠后。所以补单的目的就是通过GMV等重要指标的提升&#xff0c;增加系统对你产品的潜力预判&#xff0c;使你的链接在赛马机制中优先&am…

文件夹高效管理,轻松实现多次复制!

在日常工作和生活中&#xff0c;我们经常需要复制某些文件夹。但是&#xff0c;传统的复制方法往往需要多次操作&#xff0c;不仅耗时还容易出错。为了解决这个问题&#xff0c;我们为您提供一种高效管理文件夹的方法&#xff0c;让您轻松实现多次复制&#xff01; 首先我们要…

【论文+代码】1706.Transformer简易学习笔记

Transformer 论文: 1706.attention is all you need! 唐宇迪解读transformer&#xff1a;transformer2021年前&#xff0c;从NLP活到CV的过程 综述&#xff1a;2110.Transformers in Vision: A Survey 代码讲解1: Transformer 模型详解及代码实现 - 进击的程序猿 - 知乎 代码讲…

从零开始探索C语言(六)----数组

文章目录 1. 数组初识1.1 数组声明1.2 数组初始化1.3 数组元素的访问1.4 获取数组长度1.5 数组名 2. 多维数组3. 形参数组4.函数返回数组5. 指向数组的指针6. 静态数组和动态数组6.2 静态数组6.2 动态数组 1. 数组初识 C 语言支持数组数据结构&#xff0c;它可以存储一个固定大…

【C++杂货铺】探索list的底层实现

文章目录 一、list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity&#xff08;容量相关&#xff09;1.2.4 list element access&#xff08;元素访问&#xff09;1.2.5 list modifiers&#xff08;链表修改&#xff0…

Redis7入门概述

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…