-
windows下编译gdb源码
2020-04-11 22:29:13在学习编译gdb的过程中,一定要和本文出现的各软件版本保持一致,否则很容易因为版本的原因出现一些奇怪的问题。 1.搭建msys2环境 在win下编译gdb首先要搭建msys2的开发环境,先从官网下载msys2-i686-20190524.exe ...此文已过期,仅供参考
可以看我新写的文章
搭建msys2基础开发平台-----------更新-------------
由于gdb8.2.1使用g++编译,编译速度很慢,即使什么都没改也要编译20分钟,所以建议gdb更换为gdb-7.9-2,python3更换为python2,版本为python2-2.7.13(更新版本会出现无法识别的情况)
1.搭建msys2环境
在学习编译gdb的过程中,一定要和本文出现的各软件版本保持一致,否则很容易因为版本的原因出现一些奇怪的问题。
在win下编译gdb首先要搭建msys2的开发环境,先从官网下载msys2-i686-20190524.exe
https://www.msys2.org/
官网以后会更新版本,为了和本文写的版本保持一致,最好在清华镜像站找到msys2-i686-20190524.exe版本下载:
https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/i686/
这里为了避免不必要的麻烦,所有软件都选32位的,即使电脑是64位的也选32位安装。下载后直接安装即可,然后需要配置pacman软件源镜像,使用的是清华的开源镜像(msys2官方的源很慢),步骤如下
编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加: Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686 编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加: Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64 编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加: Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
注意: 这里不建议执行 pacman -Sy 刷新软件包数据,因为刷新后接下来安装liblzma-devel是最新的版本,与xz的依赖不兼容
2.安装gcc和make
配置好后需要用pacman安装gcc和make,使用如下命令
pacman -S gcc
以上命令是下载默认的gcc版本,不同的电脑上可能存在差异,所以最好到以下网站下载gcc-7.4.0-1的安装包
https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/i686/
假设放在E:\download\gcc-7.4.0-1-i686.pkg.tar.xz,则安装命令是
pacman -U /e/download/gcc-7.4.0-1-i686.pkg.tar.xz
同理安装make也是先下载安装包make-4.2.1-1-i686.pkg.tar.xz,然后在本地安装
pacman -U /e/download/make-4.2.1-1-i686.pkg.tar.xz
如果使用pacman -S make命令安装可能会和我的版本不一样3.下载gdb源码包
我下的版本是gdb-8.2.1-2.src.tar.gz,地址如下
https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/sources/4.编译源码
把之前下载的包解压,我的是放在E:\source\gdb-8.2.1-2.src\gdb,然后进入该目录,执行makepkg
可以看到出错了,出错的原因是缺少依赖,所以要先安装各依赖pacman -S expat pacman -S python3 pacman -S libiconv-devel zlib-devel ncurses-devel liblzma-devel libexpat-devel libreadline-devel
当然也可以本地安装
pacman -U /c/Users/Administrator/Downloads/expat-2.2.6-1-i686.pkg.tar.xz pacman -U /c/Users/Administrator/Downloads/python-3.7.3-1-i686.pkg.tar.xz
这是我安装的版本(注:如果刷新软件源后,liblzma-devel的版本是5.2.5-1,与xz依赖不兼容,这时不要选择更新xz,而应该本地安装liblzma-devel-5.2.4-1)
注意到python3安装的版本是python-3.7.3-1,这是一个最大的坑,这个版本是不能用的,我稍后会说明,现在先暂时用这个版本。
安装后继续执行makepkg,仍然出错了
pgp检验很麻烦,可以选择跳过,使用如下命令选项:
makepkg --skippgpcheck
还是出错,这是因为gdb源码是在linux编译的,想要在windows下编译需要先打补丁,打补丁使用patch命令,这里没安装,需要先安装patchpacman -S patch
安装后重新运行makepkg --skippgpcheck
提升缺少texinfo包,接着安装texinfo
pacman -S texinfo
安装时好像出了点意外,既然不能在线安装,那么可以试试本地安装
pacman -U /c/Users/Administrator/Downloads/texinfo-6.6-1-i686.pkg.tar.xz
如果出错了,可以输入mv /var/lib/pacman/db.lck /tmp命令把db.lck文件移除后重新安装,就可以安装成功了。
重新运行makepkg --skippgpcheck
又出错了,提示没找到python,可是我明明安装了python3.7啊,也可以正常运行
到这里我不知道该怎么办了,为此我选择去看makepkg和configure的源码,关键代码如下if ac_fn_c_try_link "$LINENO"; then : have_libpython=${version} found_usable_python=yes PYTHON_CPPFLAGS=$new_CPPFLAGS PYTHON_LIBS=$new_LIBS fi ... ... fi fi if test "${have_libpython}" = python2.7 -o "${have_libpython}" = python27; then ... ... fi if test "${have_libpython}" = no; then case "${with_python}" in yes) as_fn_error $? "python is missing or unusable" "$LINENO" 5 ;; auto) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python is missing or unusable; some features may be unavailable." >&5 $as_echo "$as_me: WARNING: python is missing or unusable; some features may be unavailable." >&2;} ;; *) as_fn_error $? "no usable python found at ${with_python}" "$LINENO" 5 ;; esac else if test -n "${python_prefix}"; then cat >>confdefs.h <<_ACEOF #define WITH_PYTHON_PATH "${python_prefix}" _ACEOF
if ac_fn_c_try_link “$LINENO”; 这个条件没进去,导致have_libpython还是初始化的值no,跟到ac_fn_c_try_link函数里看了一下,最后由于代码写的实在太复杂了,没看懂,通过看脚本代码来解决问题这条路走不通。
看看有没有其他方法,说不定是python3.7太新了,当前的msys2环境识别不出来呢,可以换一个旧点的版本试试。
通过pacman -R python
命令卸载当前的python,安装一个旧一点的版本python-3.4.3-2-i686.pkg.tar.xz
再次运行makepkg --skippgpcheck
… …
最后执行到check的时候出错,这说明build已经成功,编译完成,check出错了也没关系,我们不关心这个,因为用不到。
到E:\source\gdb-8.2.1-2.src\gdb\src\gdb-8.2.1\gdb去看一下
最后终于生成了所需要的gdb.exe可执行文件,大功告成! -
c++ gdb 绑定源码_新手必看:编译gdb源码 | 求索阁
2020-12-19 07:12:10./configuremakemake install1234的顺序安装了gdb7.2,那么接下来按 $./configure –target=arm-linux –program-prefix=arm-linux- –prefix=/opt/gdb/在接下来make的过程中会出现如下错误:Configuring in ./...1 我先按 。./configure
make
make install1
2
3
4
的顺序安装了gdb7.2,那么接下来按 $./configure –target=arm-linux –program-prefix=arm-linux- –prefix=/opt/gdb/
在接下来make的过程中会出现如下错误:
Configuring in ./intl
configure: loading cache ./config.cache
configure: error: target_alias' has changed since the previous run:
configure: former value:i686-pc-linux-gnu’
configure: current value: arm-linux'
configure: error: in/home/w/下载/gdb-7.2/intl’:
configure: error: changes in the environment can compromise the build
configure: error: run make distclean' and/orrm ./config.cache’ and start over
make[1]: * [configure-intl] 错误 1
make[1]:正在离开目录 `/home/w/下载/gdb-7.2’
make: * [all] 错误 2
解决的方法:删掉gcc,重新建立gcc后再执行 ./configure …..,或者执行:make disclean和rm ./config.cache命令,我看着麻烦,还是 rm -fr gcc最简单。
这里要提的就是,如果配置发生了更新,如果没有清空上一次的结果,可能会遇上这个问题。
2 换到另一个虚拟机上,这次不再直接安装 按照转载的文章的步骤可以顺利完成gdb的编译安装。但是在编译gdbserver的时候出现了问题,虽然 ./configure –target=arm-linux –host=arm-linux 指定了目标平台和 主机都是arm-linux但是编译出来结果
gdbserver: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
还是intel 80386的。
即使是指定CC为交叉编译器还是不行。
export CC=arm-none-linux-gnueabi-gcc
通过分析输出的信息
checking for arm-linux-gcc… no
checking for C compiler default output file name… a.out
checking whether the C compiler works… yes
checking whether we are cross compiling… no
由于我安装的交叉编译器是codesource的交叉编译工具链,似乎是我的交叉编译名字不符合它的要求,一定要叫 arm-linux-gcc ?于是创建一系列软链接
n -s arm-none-linux-gnueabi-gdbtui arm-linux-gdbtui
ln -s arm-none-linux-gnueabi-addr2line arm-linux-addr2line
ln -s arm-none-linux-gnueabi-gprof arm-linux-gprof
ln -s arm-none-linux-gnueabi-ar arm-linux-ar
ln -s arm-none-linux-gnueabi-as arm-linux-as
ln -s arm-none-linux-gnueabi-nm arm-linux-nm
ln -s arm-none-linux-gnueabi-ld arm-linux-ld
ln -s arm-none-linux-gnueabi-c++ arm-linux-c++
ln -s arm-none-linux-gnueabi-objcopy arm-linux-objcopy
ln -s arm-none-linux-gnueabi-c++filt arm-linux-c++filt
ln -s arm-none-linux-gnueabi-cpp arm-linux-cpp
ln -s arm-none-linux-gnueabi-ranlib arm-linux-ranlib
ln -s arm-none-linux-gnueabi-objdump arm-linux-objdump
ln -s arm-none-linux-gnueabi-readelf arm-linux-readelf
ln -s arm-none-linux-gnueabi-size arm-linux-size
ln -s arm-none-linux-gnueabi-gcov arm-linux-gcov
ln -s arm-none-linux-gnueabi-strings arm-linux-strings
ln -s arm-none-linux-gnueabi-gdb arm-linux-gdb
ln -s arm-none-linux-gnueabi-strip arm-linux-strip
ln -s arm-none-linux-gnueabi-sprite arm-linux-sprite
ln -s arm-none-linux-gnueabi-gcc-4.3.3 arm-linux-gcc-4.3.3
ln -s arm-none-linux-gnueabi-gcc arm-linux-gcc
重新执行命令 CC=arm-linux-gcc ./configure –target=arm-linux –host=arm-linux
发现 找到了交叉编译器,变成yes了
checking for arm-linux-gcc… arm-linux-gcc
checking for C compiler default output file name… a.out
checking whether the C compiler works… yes
checking whether we are cross compiling… yes
以为大功告成了,结果又出现问题
/opt/tools/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: xml-builtin.o: Relocations in generic ELF (EM: 3)
/opt/tools/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: xml-builtin.o: Relocations in generic ELF (EM: 3)
/opt/tools/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: xml-builtin.o: Relocations in generic ELF (EM: 3)
xml-builtin.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: * [gdbserver] Error 1
有点郁闷,错误提示文件格式不对。执行命令 file xml-builtin.o
xml-builtin.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
不对呀,已经指定了是交叉编译了怎么生成的目标文件还是 intel 80386呢?
原来是之前执行过没有设置好交叉编译的时候,执行过了make命令,所以生成了这样的目标文件。于是 执行 make clean 清除掉这些之前生成的文件
重新 执行CC=arm-linux-gcc ./configure –target=arm-linux –host=arm-linux make
再来查看生成的gdbserver
执行命令 file gdbserver
gdbserver: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped
终于 看到ARM!
单枪匹马摸索嵌入式的这些东西还真是让人头疼,各种问题让人摸不着头脑。好在经过长时间的尝试和摸索找到了解决的方法。
-
海思3559A上编译GDB源码操作步骤及简单使用
2019-07-29 14:33:161. 从http://ftp.gnu.org/gnu/gdb/ 下载最新...2. 在gdb-8.3目录下,创建一个build.sh脚本文件,内容如下: ./configure \ --prefix="$PWD/install" \ --target=aarch64-himix100-linux \ --host=aarch64-him...1. 从http://ftp.gnu.org/gnu/gdb/ 下载最新稳定版8.3,即gdb-8.3.tar.gz,解压缩;
2. 在gdb-8.3目录下,创建一个build.sh脚本文件,内容如下:
./configure \ --prefix="$PWD/install" \ --target=aarch64-himix100-linux \ --host=aarch64-himix100-linux \ --program-prefix=hisi-
3. 依次执行如下命令,注:make install时会显示一些install error可以忽略:
./build.sh make -j8 make install
4. 执行完后会在当前install目录下生成bin, include, lib, share四个目录,每个目录的内容如下图所示:
5. 将install/bin/目录下的hisi-gdb拷贝到海思板子上,然后执行:$ ./hisi-gdb 结果如下:
6. 测试代码main.cpp如下:
#include <stdio.h> #include <iostream> namespace { void func() { const char* p = "hello"; delete p; } } // namespace int main() { fprintf(stdout, "test start\n"); func(); fprintf(stdout, "test finish\n"); }
7. 执行如下命令,生成可执行文件main:
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ -g -o main main.cpp
8. 将可执行文件main拷贝到海思板子上,执行:$ ./main ,结果如下图所示:
9. 通过$ ulimit -c unlimited命令开启产生core文件,如上图所示;
10. 通过gdb core dump方法查看程序异常时的堆栈信息,执行:$ ./hisi-gdb main core,结果如下图所示:
-
嵌入式 编译gdb源码时出现“set but not used [-Werror=unused-but-set-variable]”问题的解决办
2014-03-01 16:21:01root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4 # root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4 # find -name arm-dis.c ./opcodes/arm-dis.c root@u12d32:/home/kongjun/work/gdb_qy_...查看具体是那个C文件,然后到该C文件所在目录下找Makefile,找到“-Werror”字段,把“-Werror”字段进行删除即可!
例子:
arm-dis.c:2155:9: error: format not a string literal and no format arguments [-Werror=format-security]
arm-dis.c:2162:9: error: format not a string literal and no format arguments [-Werror=format-security]解决方案:
root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4#
root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4# find -name arm-dis.c
./opcodes/arm-dis.c
root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4#把“-Werror”直接删除,其他不变即可!
-
编译gdb库源码
2019-09-17 23:35:16下面以gdb-7.10.1.tar.gz为例,演示如何编译gdb源码 源码链接:https://pan.baidu.com/s/1ukQmQycOyx-chlYMTWRQCw 提取码:jwjf ./configure --host=arm-none-linux-gnueabi【编译链】 --prefix=/opt/arm-linux-... -
【GDB源码编译】GDB源码编译
2020-06-12 16:11:04下载gdb-8.3.tar.gz http://www.sourceware.org/gdb/ 下载 ncurses-5.9.tar.gz http://www.gnu.org/software/ncurses/ 2、安装包编译 2.1 编译ncurses: CC=arm-himix200-linux-gcc ./configure --host=arm-himix200-... -
【GPORF源码编译】GDB源码编译之gprof交叉编译
2019-03-25 16:41:34binutils源码下载:https://github.com/bminor/binutils-gdb 可以交叉编译gprof,以便在多种嵌入式设备上进行C代码的性能分析; 2. 编译方法 CC=aarch64-himix100-linux-gcc ./configure -host=aarch64-himix100-... -
交叉编译GDB
2020-06-16 09:49:11阅读目录一、下载源码包编译gdb源码编译gdbserverGDB+GDBServer的使用使用GDB调试core文件 本章下载和使用的gdb版本是gdb-7.12.tar.gz 一、下载源码包 gdb官网下载,这里下载的是gdb-7.8.2.tar.xz,放在~/Downloads... -
交叉编译gdb for mips
2020-09-28 21:13:38文章目录1 下载并解压gdb源码2 编译gdb2.1 编译termcap参考 1 下载并解压gdb源码 mkdir -p /data/plat/gdb && cd /data/plat/gdb wget http://ftp.gnu.org/gnu/gdb/gdb-7.3.1.tar.gz tar xf gdb-7.3.1.tar.... -
交叉编译gdb调试
2019-03-30 17:07:24在开发过程中总会遇到段错误之类的问题,交叉编译gdb方便在开发板上调试,这里记录一下编译流程。 1. 交叉编译gdb 下载合适版本的gdb源码包,我这里使用的是gdb-7.8.tar.gz,点击下载地址。 交叉编译gdb过程中发现这... -
Linux调试:交叉编译gdb调试工具及gdbserver的使用方法
2020-12-17 22:28:35gdb源码下载:http://ftp.gnu.org/gnu/gdb/ tar xzvf gdb-8.0.1.tar.gz cd gdb-8.0.1/ ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc make # 编译生成可执行文件:gdb/gdb 和 gdb/gdbserver/... -
gdb源码中的print命令实现
2021-02-16 21:46:58windows下编译gdb源码 首先随便写了个测试程序 int c = 51115; int b[10] = {0}; int *p = malloc(40); sprintf(b,"%p",p); c +=b[0]&0xff; //随便赋一个非常量值,如果是常量的话编译时就直接算好写到PE... -
使用binutils-gdb来编译gdb和binutils
2020-08-24 22:35:14当下载完成后,会发现在源码中同时包含了 gdb 的目录和 binutils 各个工具的源码目录。为了实现 gdb 或 binutils 的独立编译,需要指定编译的工具。 编译 GDB 编译 GDB 的参数如下: ../binutils-gdb/configure --... -
编译gdb 报错 No module named gdb.frames
2017-05-09 00:19:00编译gdb 报错 No module named gdb.frames 将源码目录下的python模块拷贝到指定目录即可 cd /root/gdb-7.12/ cp -rpgdb/python/lib/gdb/usr/local/share/gdb/python/ 编译安装gdb 发现问题 p... -
使用GDB源码进行交叉编译
2008-12-13 10:19:00首先,先来段闲话。算是本篇的背景 最近发现我们部门目前在ATI平台上用的 GDB 版本太旧了。...我也不知道是不是版本太低的缘故,反正就抽空下载了最新版本“GDB 6.8” 在我的虚拟机上进行交叉编译。 1、从htt -
源码编译安装gdb
2017-06-07 16:36:481 、安装ncurses ... configure, make, ...4、安装gdb 下载路径:http://ftp.gnu.org/gnu/gdb/gdb-7.9.1.tar.gz confiure, make, make install 最终安装路径在/usr/local/bin . -
hadoop编译源码安装_详解GDB调试Mysql实战之源码编译安装
2021-01-15 08:31:57下载源码git clone https://github.com/mysql/mysql-server.gitcd mysql-servergit checkout 5.7编译安装安装依赖yum install -y cmake make gcc gcc-c++ ncurses-devel bison gdb需要注意的一点,需要指定 boost ... -
编译GDB(主要针对LINUX平台)
2014-02-03 14:25:221. 在浏览器输入ftp://202.193.9.3,进入里面的incoming/embeded_system_upload/experiment文件夹,下载在arm上可以单步调试的gdb源码包gdb-6.6.tar.gz 2. 准备安装的目录 #mkdir /opt/gdb/arm-gdb #mkdir /opt/... -
Linux(Ubuntu)下 vim/gvim/vimgdb 源码编译安装与配置(未完待续)
2014-02-16 13:56:03vim/gvim/vimgdb 编译安装 ...vim有两种安装方式,一种是直接从软件源安装,一种是编译源码安装,因为需要对gdb的支持来方便调试,所以这里采用源码编译的方式。 下载 vim-7.3.tar.bz2 http://ishar -
在msys环境下编译GDB的过程记录
2011-04-11 00:14:001 进来因为项目需要研究GDB,所以我从网上下载了GDB的源码用于学习,下面把我在msys环境下编译gdb的过程记录下 1 首先安装mingw 和 msys 具体如何安装这两个软件,请参考 ... -
交叉编译gdb遇到no termcap library found的解决方法
2012-08-11 14:47:13这星期在是用ejtag的时候缺少了gdb工具,因此自己需要手动编译一个gdb工具,编译过程中遇到了一些错误,翻阅了大量的网上资料解决了这些问题,从而也学习了一下交叉编译源码包的方法,这里做一个总结。 首先去... -
gdb的编译及使用
2012-01-11 09:24:39参考: ... 1、背景 ...且最好重新编译gdb源码,生成针对ARM的arm-linux-gdb 在目标机上运行gdbserver,需要用arm-linux-gcc编译gdbserver源码来生成 2、安装arm-linux-gcc 下载arm-linux- -
gdb 编译
2020-09-29 14:21:32下载gdb源码: mkdir build cd build ../configure --prefix=/data/data/rockchip20200616/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf --host=arm-linux-... -
GDB调试Mysql实战之源码编译安装
2020-09-09 05:27:52今天小编就为大家分享一篇关于GDB调试Mysql实战之源码编译安装,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 -
修改,编译,GDB调试openjdk8源码(docker环境下)
2017-04-23 23:39:21修改openjdk8的源码,然后编译和调试,达到预期的效果
-
HDFSNameNode内存全景
-
tensorflow_examples:TensorFlow示例项目-源码
-
MySQL 多实例安装 及配置主从复制实验环境
-
视频合并哪个好用,用批量剪辑软件怎么合并视频
-
Spark生态系统组件
-
单分子磁体结中的负微分电导和超泊松散粒噪声
-
Jenkins构建若依前后端分离容器镜像
-
操作系统镜像文件:DOS.iso
-
实现 MySQL 读写分离的利器 mysql-proxy
-
quickgrapher:Quick Grapher是HTML5方程求解器和图形实用程序。 始终对所有功能的改进感到满意,包括来自下游的功能更新和请求请求:)-源码
-
iOS6能用的onedrive客户端 越狱版
-
JMETER 性能测试基础课程
-
基于jsp码头船只出行及配套货柜码放管理系统的设计及实现
-
自旋1 Bose-Einstein凝聚物中二次Zeeman效应引起的拓扑缺陷和不均匀自旋模式
-
【大数据01】大数据的特征
-
spark大数据分析与实战
-
如何让Markdown 表格整体居中?
-
FastDFS 分布式文件系统部署
-
龙芯实训平台应用实战(希云)
-
Liunx 优化思路与实操步骤