歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

交叉編譯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.

第二步就是執行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的這種編譯錯誤。

Copyright © Linux教程網 All Rights Reserved