英伟达开发板中的编译系统 能否在ZC706的板子上执行?|速读
1 背景
(相关资料图)
最近一直在研究在ZC706-ARM开发板的linux系统中弄一套编译系统(不支持apt),刚好发现公司有一套英伟达的ARM开发板且带有ubunut系统(支持apt),此时产生一个想法,英伟达板子上编译的程序能否在ZC706的板子上运行?
2 过程
在英伟达的开发板中 gcc a.c生成a.out,然后拷贝到ZC706中执行出现“No such file or directory”
以前遇到的是以下原因:
文件本身不存在或者文件损坏无执行权限 (chmod 777 xxx)系统位数与程序位数不同
但是经过以下过程发现是ZC706缺少xx程序的指定的装载器:
1.排除文件损坏等问题-->重新生成拷贝验证 2.排除程序权限问题--> chmod 777 xx && ls -all 3.通过unanme -a 排除架构问题 4.通过readelf file 等命令对比正常执行的文件与错误执行文件的差别
验证过程:
a.out由英伟达gcc编译生成且zc706出现上面问题 | b.out由x86 ubunut交叉编译生成且可以正常执行
后来通过google等发现装载器也会造成该现象 ,从下面可以发现两者的区别主要在于 interpreter
解决方案:
1.统一编译器与库的关系
2. 建立软链接 ln -s /lib/ld-linux.so.3 /lib/ld-linux-armhf.so.3
3. 编译程序时,加入-static选项静态链接程序,即不使用动态库
root@tegra-ubuntu:~# readelf -h a.outELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2"s complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: ARM Version: 0x1 Entry point address: 0x8315 Start of program headers: 52 (bytes into file) Start of section headers: 4500 (bytes into file) Flags: 0x5000402, has entry point, Version5 EABI, hard-float ABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 9 Size of section headers: 40 (bytes) Number of section headers: 30 Section header string table index: 27root@tegra-ubuntu:~# readelf -h b.outELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2"s complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: ARM Version: 0x1 Entry point address: 0x86bc Start of program headers: 52 (bytes into file) Start of section headers: 4136 (bytes into file) Flags: 0x5000202, has entry point, Version5 EABI, soft-float ABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 8 Size of section headers: 40 (bytes) Number of section headers: 31 Section header string table index: 28root@tegra-ubuntu:~# readelf -l helloworld | grep interpreterreadelf: Error: "helloworld": No such fileroot@tegra-ubuntu:~# readelf -l a.out | grep interpreter [Requesting program interpreter: /lib/ld-linux-armhf.so.3]root@tegra-ubuntu:~# readelf -l b.out | grep interpreter [Requesting program interpreter: /lib/ld-linux.so.3]
3 介绍 ld装载器
Linux 使用这个ld-linux.so*(虚拟机x86的ubuntu 是使用ld-linux.so2)中的来装载(其实这只是一个链接)其他库。所以这个库必须放在 linux中/lib下。对于其他,通常我们共享库放在/lib这个路径下,而且也是系统默认的搜索路径。
Linux共享库的搜索路径先后顺序: 1、编译目标代码时指定的动态库搜索路径:在编译的时候指定-Wl,-rpath=路径 2、环境变量LD_LIBRARY_PATH指定的动态库搜索路径 3、配置文件/etc/ld.so.conf中指定的动态库搜索路径 4、默认的动态库搜索路径/lib 5、默认的动态库搜索路径 /usr/lib
注意:
1.有些开发板会发现/etc没有ld.so.conf,此时运行ldconfig会提示 "ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory"
解决:加入库到环境变量,然后ldconfig -v (/sbin/ldconfig: relative path `–v" used to build cache)
2.共享库 cnnot open shared object
测试是否动态连接,如果列出libtest.so,那么应该是连接正常了
这时候找不到libtest.so, 是动态链接库的查找路径出问题,因此加入上面动态库查找位置即可
3 ldconfig命令主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件
4 LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,不过如果没有root权限,那么只能采用输出LD_LIBRARY_PATH的方法了,要用bash命令)
标签:
相关推荐:
最新新闻:
- 英伟达开发板中的编译系统 能否在ZC706的板子上执行?|速读
- 【时快讯】如何禁用Windows期自动更新?禁用方法步骤
- Linux命令之restore命令 使用语法及参数说明
- 女UP主穿紧身衣装奥特曼跳舞?谁当直女的动态图-世界聚看点
- 外媒:今年12月PS会免比去年强得多 游戏数量翻倍-当前信息
- 今热点:【音频】syntax How to Write Custom Syntax
- 天天信息:小岛秀夫:《死亡搁浅2》游戏封面参考了一代设计
- 【世界快播报】外网热议:《艾尔登法环》哪个角色的身世最悲惨?
- 还能这样玩?Twitch主播手脚并用双开《艾尔登法环》
- 《天命奇御:归途》正式发售! 5折优惠价24.5元畅游江湖_天天速看
- 每日速看!install安装命令的常见用法 install有哪些优点?
- 定位赛10连胜是什么段位?LOL S5定位赛胜率高为什么没有上段?
- 玩家根据宝可梦游戏发售规律推测 Switch2|Pro或2023年推出
- 【环球新视野】暴风影音如何倍速播放?暴风影音倍速播放的方法
- 死或生5最后一战怎么反击?死或生5最后一战反击技巧攻略
- 全球观热点:HTC One X Recovery一键刷入步骤介绍 一键刷入的注意事项
- 《天命奇御:归途》正式发售 优惠价24.5元畅游江湖|今日关注
- 焦点滚动:曝斯柯达打算退出中国市场,曾靠“贴牌大众”爆火,下一站发力印度
- 通信行程卡下线,其存储的个人信息可以挪作他用吗?
- 第二代骁龙8赋能Xiaomi 13系列年度旗舰,实现高端探索新突破:世界资讯
- 全球观速讯丨《人中之龙维新!极》公布全新支线剧情、照功能等游戏要素
- 日本知名动画歌手水木一郎因肺癌去世 享年74岁 热头条
- 《云·原神》PC平台公测正式开启,可实现低配置高画质
- 热议:小米1TB移动固态硬盘发布:众筹649元 读写超2000MB/s
- 环球今热点:谐波减速机优点是什么?谐波传动减速器的优点
- 怎么用电脑摄像头录像?使用电脑摄像头录像详细步骤
- 三阶魔方还原公式是什么?三阶魔方的还原公式:环球今日报
- Visio绘图文件阅读器 VSD Viewer版功能介绍
- MetroModernUI库应用实例 MetroModernUI库安装流程_天天速看
- 联想V480EI Capitan完美驱动教程 安装黑苹果的步骤及注意事项|全球百事通
- 诺亚舟np360学习机怎么样?诺亚舟np360性能介绍_世界热推荐
- c语言编程题中华文本库 计算机考试二级C语言上机试题|当前速看
- nginx简单介绍 tomcat与nginx、apache的区别是什么?
- 环球观热点:小米与华为手机哪个好些?小米、华为与手机销量有关的对比
- Slony到底是什么?关于VMware Desktone中的Slony和数据库
- 视觉效果艺术家在“NVIDIA Studio 创意加速”中分享电影幕后制作的故事
- 操作系统有哪些类型?操作系统各自的特点
- 天天微速讯:htc是什么牌子?htc款式推荐
- arp防火墙哪个最好?金山arp防火墙的介绍 世界关注
- 三星9050好不好?三星9050如何刷机?
- 通讯!跳跃忍者怎么玩?若吃完所有能量球最多能保留多少能量?
- 纯甲类功放是什么意思?纯甲类功放价格参考及其介绍 世界今亮点
- 极米投影斩获五项国际大奖:画面自适应技术获日本VGP2023技术奖
- 联想S890支持什么视频格式?联想S890支持RMVB播放吗?-环球关注
- 全球热讯:百度云盒怎么预约购买?电视应用购买教程
- 辽源市谷歌高清卫星地图离线包如何下载?:视焦点讯
- 洛谷 P8400 Cupcake Party 计算机科学教育新生态 :视焦点讯
- 台式机硬盘报价如何?台式机硬盘最新报价:独家
- 光电耦合器的作用是什么?光电耦合器工作原理详解 _世界最资讯
- 环球观察:样本容量怎么确定?影响样本容量n的因素
- 洛谷 P8400 Cupcake Party 计算机科学教育新生态 :视焦点讯
- Windows Live应用怎么添加到网站或博客?
- 辽源市谷歌高清卫星地图离线包如何下载?:视焦点讯
- c语言编程题中华文本库 计算机考试二级C语言上机试题|当前速看
- 全球聚焦:希捷宣布全球大裁员 股价在盘后大涨9%至26.26美元
- 环球观察:样本容量怎么确定?影响样本容量n的因素
- 现在进行时怎么使用?现在进行时和一般现在时的将来时态_微速讯
- Slony到底是什么?关于VMware Desktone中的Slony和数据库
- 世界快看点丨信息的价值是什么?信息的英文名Information
- 图片的格式怎么改?教你快速转格式的方法
- 联想V480EI Capitan完美驱动教程 安装黑苹果的步骤及注意事项|全球百事通
- 三阶魔方还原公式是什么?三阶魔方的还原公式:环球今日报
- 排名精灵怎么样?排名精灵功能评测
- 钛备份怎么用?钛备份怎么还原?
- 怎么用魔影工厂转换视频?魔影工厂怎么识别爱奇艺的视频?
- connectify怎么设置?connectify如何设置使用教程
- Win7系统中WmiPrvSE是什么进程?如何禁止Wmiprvse.exe进程?
- Anyview阅读APP如何使用?Anyview阅读使用图文教程
- win7使用过程中出现错误1079故障的原因及解决方法
- 网页中Flash如何下载?网页中Flash下载方法
- 网络老是掉线怎么回事?wifi一段时间断开怎么办?
- win10怎么升级正版?win10升级正版步骤
- qq远程控制鼠标点不动怎么?qq远程控制鼠标点不动解决方法
- 跨显卡双屏显示怎么设置?跨显卡双屏显示设置问题
- 如何通过Logoup 3D制作立方体?Logoup 3D制作立方体操作步骤
- 视频万能驱动怎么安装?视频万能驱动安装方法
- 怎么给手机版的WPS文档加密?手机版的WPS文档加密方法
- Adblock浏览器怎么用?Adbloc去广告浏览器下载
- win10 Build 9865怎么更新升级?win10 Build 9865更新升级方法
- qq授权管理在哪里?qq授权管理介绍
- 腾讯防沉迷如何通过官方修改?腾讯防沉迷修改方法
- 电脑断网掉线怎么办?电脑断网掉线的解决方法
- 九章云极DataCanvas公司荣获 “WISE2022新经济之王年度企业”
- 如何做好软文推广? 软文推广的方法和技巧是什么?
- alg是什么文件?alg.exe是不是病毒?