交叉编译linux内核无法识别el,交叉编译gdb遇到no termcap library found的解决方法...

在是用ejtag的时候缺少了gdb工具,因此自己需要手动编译一个gdb工具,编译过程中遇到了一些错误,翻阅了大量的网上资料解决了这些问题,从而也学习了一下交叉编译源码包的方法,这里做一个总结。

首先去官方网站下载gdb的源码包,我下载的7.4.1版本的源码包,解压开来,进入到源码包的根目录下。对于一个源码包,拿到手里首先要阅读的就是README,然后看一下INSTALL文件,这个文件里编译源码包的步骤。

基本上所有的源码包都是三步,configure,make,make install。

首先执行的就是./configure,这是一个配置的脚本。后面2步用到的很多很多配置都是在这里进行的,比如说编译所用的工具之类,所以交叉编译必须要配置这里,可以执行./configure

--help查看后面参数的类型,对于交叉编译,主要就是有三个参数:--build --host --target。

System types:

--build=BUILD configure for building on BUILD [guessed]

--host=HOST cross-compile to build programs to run on HOST [BUILD]

--target=TARGET configure for

building compilers for TARGET [HOST]

--build参数是指你编译源码包的系统环境,可以通过查看系统的环境变量来获取,执行set命令可以看到 MACHTYPE=i686-pc-linux-gnu,则--build=i686-pc-linux-gnu。

--host参数指的是编译出来的工具运行在什么系统上,我编译出来的gdb是要运行在龙芯1b的开发板上,因此环境就是mipsel-linux的环境,如果你的是arm的开发板,就是arm-linux的环境。

--target参数指的是编译出的工具所要操作的系统,这个必须要理解明白,比如说我编译出来的gdb要在我的电脑上运行,但是要调试交叉编译出来的mips指令集的程序,这个时候呢,--target就要是mipsel-linux,但是--host是i686-pc-linux-gnu。

综上所述,交叉编译第一条命令应该是:

./configure --build=i686-pc-linux-gnu

--host=mipsel-linux --target=mipsel-linux

--prefix=/install.

由于我要针对arm板子做调试,所以配置如下:

./configure --target=arm-linux

--prefix=/usr/local/arm-gdb -v

第二步就是执行make,交叉编译gdb的时候make会出现下面这样一个错误:

configure: error: no termcap library found

make[1]: *** [configure-gdb] Error 1

make: *** [all] Error

2 很明显这是缺少一个termcap库,

解决此问题的三种方法:

(1)执行sudo

apt-get install libncurses5-dev安装,如果系统提示未能找到安装包,尝试2、3种做法

(2)下载ncurses-devel-5.7-3.20090208.el6.x86_64.rpm,执行如下命令:

rpm -ivh

ncurses-devel-5.7-3.20090208.el6.x86_64.rpm

(ncurses-devel-5.7-3.20090208.el6.x86_64.rpm安装包下载路径:http://rpm.pbone.net/index.php3/stat/4/idpl/25009932/dir/centos_6/com/ncurses-devel-5.7-3.20090208.el6.x86_64.rpm.html)

(3)termcap库是一个终端数据库,可以从官网下载一个版本的源码包,这里需要注意的是这个源码包也许要交叉编译,那是因为这个是你交叉编译gdb需要的库,在configure时可以指定--prefix指定安装目录,交叉编译安装完成后必须要将这个库放在交叉编译工具gcc(我的是mipsel-linux-gcc)的默认搜索库目录下。到你的交叉编译工具目录下,怎样查看默认搜索库的目录在哪里呢,执行下面的命令:

XXXXXXX-linux-gcc -print-file-name=libc.a

(由于我是针对arm版做测试,所以我执行命令arm-linux-gcc -print-file-name=libc.a)

就会显示出交叉编译工具所使用的库的默认搜索目录了。

然后将termap.h拷贝到默认目录下的include下,将libtermcap.a拷贝到默认目录下的lib下。

这样make时XXX-linux-gcc就可以找到这个库进行编译,make就可以通过啦!

然后make install,可以在configure时指定安装目录--prefix,这样便于寻找编译生成的工具。

这样我们就可以找到我们需要的gdb工具啦!

如果我们不交叉编译gdb,而是编译在本机上试用的gdb时nake不会碰到这个错误,那是因为本机gcc默认库搜索目录/usr/lib下有这个库libtermcap.a,但是这是一个链接文件,链接到了libncurses.a上,那是因为termcap库是一个比较老的终端数据库,现在都试用ncurses库代替,但是有些程序还是试用termcap库,所以系统中安装ncurses库时默认做一个链接文件,防止gdb的这种编译错误。

a4c26d1e5885305701be709a3d33442f.png

上述三种方法,通常方法2最有效。如果编译过程中还有头文件相关的错误,建议换至最新版gdb安装包

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值