织梦CMS - 轻松建站从此开始!

罗索

交叉编译gdb遇到no termcap library found的解决方法

jackyhwei 发布于 2017-04-19 09:41 点击:次 
在是用ejtag的时候缺少了gdb工具,因此自己需要手动编译一个gdb工具,编译过程中遇到了一些错误,翻阅了大量的网上资料解决了这些问题,从而也学习了一下交叉编译源码包的方法,这里做一
TAG: gdb  交叉编译  termcap  

在是用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.

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

configure: error: no termcap library found

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

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

XXXXXXX-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的这种编译错误。

(秩名)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201704/17512.html]
本文出处:linuxidc 作者:秩名 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容