移植ncurses库
本文使用的ncurses版本为ncurses-5.9.tar.gz
1. 将ncurses压缩包拷贝至Linux主机或使用wget命令下载并解压
tar-zxvfncurses-5.9.tar.gz
2. 解压后进入到ncurses-5.9目录下
cdncurses-5.9
3. 在ncurses-5.9目录下创建编译完成后生成文件位置
mkdiroutput
cdoutput
mkdirarm-linux
4. 生成Makefile文件
./configure--target=arm-none-linux-gnueabi--prefix=$PWD/output/arm-linux--enable-termcap--with-shared--without-ada
- --target表示编译器的前缀,需要根据编译的不同需求进行修改
- --prefix表示编译完成后生成文件的位置
- --nable-termcap表示关键代码使用termcap(terminalcapabilities)数据库[自动检测]
- --with-shared表示动态编译
5. 编译
make
当遇到如下报错时
Makefile:794:recipefortarget'../obj_s/lib_gen.o'failed
make[1]:***[../obj_s/lib_gen.o]Error1
make[1]:Leavingdirectory'.../ncurses-5.9/ncurses'
Makefile:109:recipefortarget'all'failed
make:***[all]Error2
需要进入ncurses-5.9/include文件夹,修改curses.tail文件下的如下内容,将注释/*generated*/去掉
externNCURSES_EXPORT(bool)mouse_trafo(int*,int*,bool);/*generated*/
6. 安装
Makeinstall
7. 安装完成后会在/output/arm-linux目录下生成库文件,我们只需将lib目录下的libncurses.so.5库拷贝至开发板
移植gdb
本文使用的gdb版本为gdb-7.12.tar.gz
1. 将gdb压缩包拷贝至Linux主机或使用wget命令下载并解压
tar-zxvfgdb-7.12.tar.gz
2. 解压后进入到ncurses-5.9目录下
cdgdb-7.12
3. 生成Makefile文件
./configure-host=arm-none-linux-gnueabiCC=/home/vanxoak/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc--enable-shared--prefix=$PWD/output/arm-linux--disable-werror--without-x--disable-gdbtk--disable-tui--without-included-regex--without-included-gettextLDFLAGS="-L$PWD/../output/arm-linux/lib"CPPFLASS="-I$PWD/../output/arm-linux/include"
- --host=arm-none-linux-gnueabi用arm-none-linux-gnueabi编译
- CC为交叉编译器绝对路径
- --enable-shared动态编译
- prefix=“$PWD/output/arm-linux”安装目录
- --disable-werror屏蔽werror报警
- --without-x取消xwindows支持
- --disable-gdbtk取消gdbtk
- --disable-tui取消tui界面
- --without-included-gettext去掉用于多语言处理的gettext库
- "LDFLAGS=XXX"指交叉编译完成的ncurse的lib目录路径
- "CPPFLAGS=XXX"指是交叉编译完成的ncurse的include目录路径
4. 编译
make
5. 安装
makeinstall
安装完成后会在.../gdb-7.12/output/arm-linux/bin/目录下生成gdb可执行程序。
移植至HDT3-EVM开发板
1. 将libncurses.so.5库文件拷贝至/usr/lib目录下,若/usr目录下无lib目录可手动创建mkdirlib
2. 将gdb程序拷贝至/bin目录下
测试调试
1. 编写可执行测试程序,示例hello.c代码如下,该代码执行后会打印HelloWorld。
#include
intmain(intargc,char*argv[])
{
printf("HelloWorld\n");
return0;
}
2. 使用交叉编译器进行编译,需要注意的是,要使用gdb调试程序,需要在使用交叉编译器编译源代码时加上"-g"参数保留调试信息,否则不能使用GDB进行调试且报如下最后一行所示错误:
/home#gdbhello
GNUgdb(GDB)7.12
Copyright(C)2016FreeSoftwareFoundation,Inc.
LicenseGPLv3+:GNUGPLversion3orlater
Thisisfreesoftware:youarefreetochangeandredistributeit.
ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"
and"showwarranty"fordetails.
ThisGDBwasconfiguredas"arm-none-linux-gnueabi".
Type"showconfiguration"forconfigurationdetails.
Forbugreportinginstructions,pleasesee:
.
FindtheGDBmanualandotherdocumentationresourcesonlineat:
.
Forhelp,type"help".
Type"aproposword"tosearchforcommandsrelatedto"word"...
Readingsymbolsfromhello...(nodebuggingsymbolsfound)...done.
3. 使用交叉编译器编译测试程序
arm-none-linux-gnueabi-gcc-g-ohellohello.c
4. 将生成的hello文件拷贝至HDT3-EVM开发板上并使用sync命令保存
5. 输入gbd命令启动gdb程序
/home#gdb
GNUgdb(GDB)7.12
Copyright(C)2016FreeSoftwareFoundation,Inc.
LicenseGPLv3+:GNUGPLversion3orlater
Thisisfreesoftware:youarefreetochangeandredistributeit.
ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"
and"showwarranty"fordetails.
ThisGDBwasconfiguredas"arm-none-linux-gnueabi".
Type"showconfiguration"forconfigurationdetails.
Forbugreportinginstructions,pleasesee:
.
FindtheGDBmanualandotherdocumentationresourcesonlineat:
.
Forhelp,type"help".
Type"aproposword"tosearchforcommandsrelatedto"word".
(gdb)
上述代码(gdb)为GBD内部命令引导符,表示等待用户输入gbd命令
6. 使用"filehello"命令载入被调试的测试程序
(gdb)filehello
Readingsymbolsfromhello...done.
显示Readingsymbolsfromhello...done.表示被测程序加载成功
7. 使用"r"命令执行调试测试程序
(gdb)r
Startingprogram:/home/hello
HelloWorld
[Inferior1(process849)exitednormally]
如上述代码显示"HelloWorld"即表示hello程序执行完成
(gdb)help
Listofclassesofcommands:
aliases--Aliasesofothercommands
breakpoints--Makingprogramstopatcertainpoints
data--Examiningdata
files--Specifyingandexaminingfiles
internals--Maintenancecommands
obscure--Obscurefeatures
running--Runningtheprogram
stack--Examiningthestack
status--Statusinquiries
support--Supportfacilities
tracepoints--Tracingofprogramexecutionwithoutstoppingtheprogram
user-defined--User-definedcommands
Type"help"followedbyaclassnameforalistofcommandsinthatclass.
Type"helpall"forthelistofallcommands.
Type"help"followedbycommandnameforfulldocumentation.
Type"aproposword"tosearchforcommandsrelatedto"word".
Commandnameabbreviationsareallowedifunambiguous.
-
Linux
+关注
关注
87文章
11219浏览量
208872 -
编译器
+关注
关注
1文章
1618浏览量
49043 -
全志
+关注
关注
24文章
240浏览量
53068
发布评论请先 登录
相关推荐
评论