欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年如何交叉编译应用程序 .pdf

    • 资源ID:34290037       资源大小:40.34KB        全文页数:3页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年如何交叉编译应用程序 .pdf

    如何交叉编译应用程序,技巧,注意事项。最近大家都涉及交叉编译应用程序,感觉大家的路子有点偏, 觉得有必要纠正一下。一般的应用程序编译的步骤无外呼 ./configure &mak e &m akeinstall但是对于交叉编译不能照搬,尤其要注意不能轻易make install(当然如果指定了 - prefix 就无所谓了, 否则可能会覆盖标准路径的程序就惨了)这里有两个思路:1 对于刚开始交叉编译的人来说,往往很晕,总想借助 ./configure 后面加一堆参数来解决,比如 ./configure - -tar get=arm-9tdm i- linux-gnu - host=arm-9tdmi-linux-gnu 来搞定 ,对于一般的小的程序来说,应该没有问题,而且也推荐大家这样用,但是要注意,这样作之前,先要 ./configure - -help |grep - host,看看有没有这样的选项,如果没有呢?想想也可能,如果程序的作者根本没有考虑到除了x86的平台呢?你只能自己改写Mak efile 了。所以 , ./configure 不是万能的, 而且语法很混乱, 不要指望 ./configure 给你作一切。而且局限很大。2 所以这个时候 , 就要求交叉编译的第二个层次,自己改写Mak efile , 想怎么改就怎么改, 灵活性最大 需要你开始就./configure 一下, 跟平台有关的参数一律不加。./configur e 过后就会生成Makefile 了,里面的gcc 相关的参数,包括lib 的路径当然是x86下的了, 比如 /usr/local/lib/,/usr/lib/,/lib/ 什么的,改掉就是了。或者注释掉。 gcc要换成 arm-linux gcc一类的编译器,(如果不想每次都改, 参考下面的include prerules.m k的做法) ,总之,这要求你的Makefile 掌握的很熟练,思路就是边编译,发现问题,再改,即使一开始Makefile不熟练,到后来,也熟练了。是个练习Mak efile 的好方式。总之,我们最后要的就是Makefile , 看你怎么能得到它。一个最标准的Mak efile(去掉很多无用的东西)通过./configure 生成的Makefile ,你会发现冗余的地方非常多,其实关键的地方,就那么20几条,可以试着精简一下,这样对程序的组织架构会熟悉的快一些,毕竟Makefile 反应了程序(具体就是.c 和 .h )之间的依赖关系 。openssh的Mak efile 我没有精简过(当然要精简也很容易), 举个telnetd 的例子,说明一下:- telnetd-#- -TOPDIR := $(shell /bin/pwd)TOPDIR := $(TOPDIR)/.#prerules.mk包含了这些变量的定义,比如$CC, $CPP , $CXX , $CFLAGS 等等。#尽量不要在这里出现,CC= arm-linux- gcc这样的定义,扩展性不好, 尽量用全局变量, 便于管理和拓展。include $(TOPDIR)/prerules.mk#- -EXEC = telnetd#好的Makefile 都是这样写的, 也就是具体生成一个可执行文件或者 lib 库,需要哪些.o,这些.o会依据后面的 .c.o: 规则来编译出来的。OBJS = telnetd.o state.o termstat.o slc.o sys_term.outility.oglobal.o authenc.ologwtm p.o logout.o#$(CC) 的编译选项,一般程序自己的带的,不要改它,而且一般都是+= , 不要用 = ,CFLAGS += - DEMBED - DPARANOID_TTYS-DUSE_TERMIO- DKLUDGELINEMODE- D_GNU_SOURCE-Wallifdef CONFIG_DEFAULTS_LIBC_UCLIBCLDLIBS:= -lutil$(LDLIBS)endifall: $(EXEC)很显然all 是最关键的了, 也要发在最开始的地方。这样m ak e 就相当于m ake all ,这是大家的潜规则。.c.o:$(CC)- c -o $ 如果是应用程序的可执行文件,我们可以用ldd 命令来查看它需要哪些必要的库。具体的命令:refer ,http:/infomax/bbs/viewthr ead.php? tid= 52&extra=page%3D12看看需要哪些配置文件,也就是conf文件。其实如果想知道上面的这些,还有个办法, 就是先在pc上编译, 安装,./configure - prefix=/work/bob (改成你自己的目录即可) , m ake &m ake install ,看看/work/bob/ 下面到底生成了哪些file , 你不就心里有数了吗。先把你知道的应用程序可执行文件 copy到板子上去,执行一下,如果缺少哪些库 , 屏幕上会打出来一些出错信息的。缺什么,就copy什么到板子上好了,多半缺的都是库(.so文件).如果还是莫名其妙的出什么问题(ps 结果就是没有该进程), 有可能是缺少什么配置文件,可以用strace来查查看:具体 strace的用法可以 refer :http:/infomax/bbs/viewthread.php?tid= 56&extr a=page% 3D1如果程序运行的结果和pc上不太一样 。 就要注意几个根本的问题了。1 板子的endian是什么类型的呢? x86 是littleendian, arm 的板子可能是littleendian ,也可能是big-endian 的,如果是big-endian , 就要注意了。要在程序里面改, 添加什么 le32_to_cpu() 这样的函数来转换的。2对齐问题, x86和arm 的对齐处理方式是不一样的。3 中文的问题, 有些程序需要支持中文, 繁体, 什么的, pc上可以, 拿到板子上就不可以了。你要考虑一下 glibc库上面是否支持 locale ,libiconv 一类的库。生成动态链接库的一个例子,也是标准的Makefile#Start of Makefile#- -TOPDIR := $(shell /bin/pwd)TOPDIR := $(TOPDIR)/././include $(TOPDIR)/prerules.mk#- -SRCS = download.c curl_err.cDownloadStatusQuery.cOBJS = download.o curl_err .o DownloadStatusQuery.oCFLAGS += - I././include - Wall # - g -ggdball: libdownload.so.1.0.0#test_main:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - # $(CC)$(CFLAGS)-I./././include/- o m ain main.c$(LIBS)- ldownload-L. -L./././lib%.o:%.c或者 .c.o: 均可$(CC)-c -o $(CFLAGS) $libdownload.so.1 .0.0 : $(OBJS)$(CC)-shared -Wl,-soname,libdownload.so.1.0-o libdownload.so.1 .0.0 $(OBJS)$(STRIP) libdownload.so.1.0.0rm -r f libdownload.so.1 .0rm -r f libdownload.soln -s libdownload.so.1 .0.0 libdownload.so.1.0ln -s libdownload.so.1 .0 libdownload.socp -afv libdownload.so*$(COMM_LIB_PATH)cp -f download_oper ation.h $(COMM_INC_PATH)cp -f oper ation.h $(COMM_INC_PATH)cp -r f curl $(COMM_INC_PATH)cp -f curl_err.h $(COMM_INC_PATH)cp -f DownloadStatusQuery.h$(COMM_INC_PATH)install:# copy到ramdisk里面就好了cp -afv libdownload.so*$(T_LIB)#用-afv 参数比较好,保证一模一样clean:rm -r f libdownload.so*rm -r f $(COMM_LIB_PATH)/libdownload.so*rm -r f $(COMM_INC_PATH)/download_operation.hrm -r f $(COMM_INC_PATH)/oper ation.hrm -r f $(COMM_INC_PATH)/curl/rm -r f $(COMM_INC_PATH)/curl_err .hrm -r f $(COMM_INC_PATH)/DownloadStatusQuery.hrm -r f *.o最后的时候, 解释一下:$(CC)-shared -Wl,-sonam e,libdownload.so.1 .0 - o libdownload.so.1.0.0$(OBJS)会得到文件, libdownload.so.1.0.0,我们通常要作两个链接ln -s libdownload.so.1.0.0libdownload.so.1.0(这个是在板子上运行的时候,一定要有的,because,-Wl,-sonam e,libdownload.so.1 .0 了,写死了。ln -s libdownload.so.1.0libdownload.so(这个是给别人链接的时候用的)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -

    注意事项

    本文(2022年如何交叉编译应用程序 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开