Ubuntu 编译安装 Binutils2.4版本
默认的Binutils版本为
binutils:
Installed: 2.34-6ubuntu1.4
Candidate: 2.34-6ubuntu1.4
Version table:
*** 2.34-6ubuntu1.4 500
500 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
100 /var/lib/dpkg/status
2.34-6ubuntu1 500
500 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/main amd64 Package
默认的2.34 包含的 Objdump
,gprof
,BDF
,lld
,等是不兼容最新的DWARF-V5
的
而Clang-14
-g 生成的编译信息是以DWARF-V5
最新版本为基础的,
所以就会出现如下错误:
DWARF error: invalid or unhandled FORM value: 0x25
困扰许久
-
一种解决方式是clang++ 等最新编译器编译时添加
-gdwarf-4
参数使其使用DWARF
V4版本。但这种方法有事并不可行
索性就安装最新的版本吧! Binutils2.4 是支持 DWARF-V5
的
或者直接下载我已编译好的:
建议一下命令使用带有管理员用户执行,若没有权限,则在命令前加sudo
-
下载源码:
wget https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.gz
-
解压编译
tar -zxvf XXXX cd XXXX ./Configure --prefix=`pwd`/build-install make make install
-
如果Configure时提示 缺少GMP4.2+,MPFR3,1,0+ 之类的依赖的话
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
分别解压 进入对应目录
tar -jxvf XXX cd XXX ./Configure make && make install
-
WARNING: `makeinfo’ is missing on your system. You should only need it if
之类的错误
安装:
apt-get install texinfo apt-get install flex apt-get install bison
-
如果出现
fatal error: sys/cdefs.h: No such file or directory
在64位的Ubuntu如果执行X86平台32位编译,gcc -m32 -o x x.c会报错:fatal error: sys/cdefs.h: No such file or directoryapt-get install libc6-dev-i386
apt-get install libc6-dev-i386
上述问题都解决后, 建议删除掉当前目录, 重新解压Binutils
, 重新执行:
tar -zxvf XXXX
cd XXXX
./Configure --prefix=`pwd`/build-install
make
make install
执行完成后 , 会在当前目录下的/build-install/bin
目录中出现新安装的gprof,objdump,lld
等
使用链接命令进行连接
#例如:
ln -s `pwd`/bin/gprof /usr/bin/gprof24