交叉编译中常见错误解决方法

目录

程序运行基础知识

编译程序时去哪找头文件?

链接时去哪找库文件?

运行时去哪找库文件?

运行时不需要头文件,所以头文件不用放到板子上

常见错误的解决方法

头文件问题

库文件问题

运行问题

交叉编译程序的万能命令

把头文件、库文件放到工具链目录里

把库文件放到板子上的 /lib 或/usr/lib 目录里


程序运行基础知识

编译程序时去哪找头文件?

系统目录:就是交叉编译工具链里的某个 include 目录;也可以自己指定: 编译时用 “ -I dir ”选项指定。

链接时去哪找库文件?

系统目录:就是交叉编译工具链里的某个 lib 目录;也可以自己指定:链接 时用 “ -L dir ”选项指定。

运行时去哪找库文件?

系统目录:就是板子上的/lib、/usr/lib 目录;也可以自己指定:运行程序用环境变量 LD_LIBRARY_PATH 指定。 运行时不需要头文件,所以头文件不用放到板子上

运行时不需要头文件,所以头文件不用放到板子上

常见错误的解决方法

头文件问题

编译时找不到头文件,在程序中这样包含头文件:#include <xxx.h>,对于尖括号里的头文件,去哪里找它?

系统目录:就是交叉编译工具链里的某个 include 目录;

也可以自己指定:编译时用 “ -I dir ”选项指定。

怎么确定“系统目录”? 执行下面命令确定目录:

echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -

它会列出头文件目录、库目录(LIBRARY_PATH)。

你需要在头文件目录中确定有没有这个文件,或是自己指定头文件目录

库文件问题

链接程序时如果有这样的提示:undefined reference to `xxx',它表 示 xxx 函数未定义。

那么解决方法有 :

  • 1.去写出这个函数
  • 2.使用库函数,那需要在链接时指定库

怎么指定库?想链接 libabc.so,那链接时加上:-labc。

库在哪里?

  • 系统目录:就是交叉编译工具链里的某个 lib 目录
  •  也可以自己指定:链接时用 “ -L dir ”选项指定

怎么确定“系统目录”?执行下面命令确定目录:

echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v –

它会列出头文件目录、库目录(LIBRARY_PATH),你编译出库文件时,可以把它放入系统库目录。

运行问题

运行程序时找不到库:

error while loading shared libraries: libxxx.so:

cannot open shared object file: No such file or directory

找不到库,库在哪?

  • 系统目录:就是板子上的 /lib、/usr/lib 目录
  • 也可以自己指定:

运行程序用环境变量 LD_LIBRARY_PATH 指定,执行以下的命令:

export LD_LIBRARY_PATH=/xxx_dir ; ./test

LD_LIBRARY_PATH=/xxx_dir ./test

交叉编译程序的万能命令

如果交叉编辑工具链的前缀是

arm-buildroot-linux-gnueabihf-

比如

arm-buildroot-linux-gnueabihf-gcc

交叉编译开源软件时,如果它里面有 configure, 万能命令如下:

就可以在当前目录的 tmp 目录下看见 bin, lib, include 等目录

里面存有可执行程序、库、头文件

把头文件、库文件放到工具链目录里

如果你编译的是一个库,请把得到的头文件、库文件放入工具链的 include、 lib 目录里。别的程序要使用这些头文件、库时,会很方便。

工具链里可能有多个 include、lib 目录,放到哪里去?

执行下面命令来确定目录:

echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v –

它会列出头文件目录、库目录(LIBRARY_PATH)

把库文件放到板子上的 /lib 或/usr/lib 目录里

程序在板子上运行时,需要用到板子上/lib 或/usr/lib 下的库文件;程序运行时不需要头文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/125848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源论道 源聚一堂@COSCon

自2015年以来&#xff0c;开源高峰论坛一直是中国开源年会中的传统亮点项目。本次在COSCon23 大会期间的高峰圆桌会&#xff0c;于2023年10月29日在成都高新区的菁蓉汇召开。 本次高峰圆桌上&#xff0c;我们特别邀请了20 位来自企业&#xff0c;基金会和社区的专家和领袖参加讨…

基于单片机设计的智能风扇(红外线无线控制开关调速定时)

一、项目介绍 在炎热的夏季&#xff0c;风扇成为人们室内生活中必不可少的电器产品。然而&#xff0c;传统的风扇控制方式存在一些不便之处&#xff0c;比如需要手动操作开关、无法远程控制和调速&#xff0c;以及缺乏定时功能等。为了解决这些问题&#xff0c;设计了一款基于…

Python实验项目6 :文件操作与模块化

1、使用random库&#xff0c;产生10个100到200之间的随机数&#xff0c;并求其最大值、平均值、标准差和中位数。 # 1、使用random库&#xff0c;产生10个100到200之间的随机数&#xff0c;并求其最大值、平均值、标准差和中位数。 import random # 定义一个列表 list[] for i …

关于Android Studio中开发Flutter配置

配置系统环境变量&#xff1a;path下 &#xff0c;flutter的bin目录下 File->Settings->Languages&Frameworks->FlutterFile->Settings->Languages&Frameworks->DartFile->Settings->Languages&Frameworks->Android SDK 确认是…

QMetaType和QVariant使用

描述 QMetaType和QVariant可以结合使用&#xff0c;用于在运行时确定数据类型。 QMetaType是Qt提供的用于管理各种数据类型的类&#xff0c;它可以帮助我们在运行时动态地创建、销毁、复制和比较数据类型。我们可以使用QMetaType来注册我们自己的数据类型&#xff0c;并为其提…

ChromeDriver谷歌浏览器驱动下载安装与使用最新版118/119/120

ChromeDriver谷歌浏览器驱动下载安装与使用最新版118/119/120 1. 确定Chrome版本 我们首先确定自己的Chrome版本 Chrome设置->关于Chrome 可以看到&#xff0c;当前chrome是最新版本&#xff1a;119.0.6045.124&#xff08;正式版本&#xff09; &#xff08;64 位&#…

前端图片压缩上传,减少等待时间!优化用户体检

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 这里有两张图片&#xff0c;它们表面看上去是一模一样的&#xff0c;但实际上各自所占用的内存大小相差了180倍。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&…

RxJava/RxAndroid的基本使用方法(一)

文章目录 一、什么是RxJava二、使用前的准备1、导入相关依赖2、字段含意3、Upstream/Downstream——上/下游4、BackPressure5、BackPressure策略6、“热” and “冷” Observables7、 基类8、事件调度器9、操作符是什么&#xff1f;10 、Consumer和 Observer的区别 三、RxJava的…

已解决:Python Error: IndentationError: expected an indented block 问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

C# OpenCvSharp 玉米粒计数

效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.*|*.bmp;…

OpenGL_Learn08(坐标系统与3D空间)

目录 1. 概述 2. 局部空间 3. 世界空间 4. 观察空间 5. 剪裁空间 6. 初入3D 7. 3D旋转 8. 多个正方体 9. 观察视角 1. 概述 OpenGL希望在每次顶点着色器运行后&#xff0c;我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#x…

C++跨模块传递CRT引发问题

SDK新增加了一个接口&#xff0c;参数使用std::vector<Class>&&#xff0c;传给dll函数中填充数值&#xff0c;然后应用层拿到这个vector出现了崩溃 越界等问题&#xff0c;调了很久&#xff0c;之前知道这个问题&#xff0c;没有想起来&#xff0c;耽误了许多时间。…

用Python的requests库来模拟爬取地图商铺信息

由于谷歌地图抓取商铺信息涉及到API使用和反爬虫策略&#xff0c;直接爬取可能会遇到限制。但是&#xff0c;我们可以使用Python的requests库来模拟爬取某个网页&#xff0c;然后通过正则表达式或其他文本处理方法来提取商铺信息。以下是一个简单的示例&#xff1a; # 导入requ…

uniapp+uview2.0+vuex实现自定义tabbar组件

效果图 1.在components文件夹中新建MyTabbar组件 2.组件代码 <template><view class"myTabbarBox" :style"{ backgroundColor: backgroundColor }"><u-tabbar :placeholder"true" zIndex"0" :value"MyTabbarS…

网页分析和xml.etree库

源代码&#xff1a; Lib/xml/etree/ElementTree.py 该xml.etree.ElementTree模块实现了一个简单高效的 API&#xff0c;用于解析和创建 XML 数据。 一、说明 这是一个简短的使用教程xml.etree.ElementTree&#xff08;ET简而言之&#xff09;。目标是演示该模块的一些构建块和基…

基于FPGA的模板匹配红外目标跟踪算法设计

为什么要写这篇文章 我写这篇文章的原因是一天在B站看到了一个大神发的视频是关于跟踪一个无人机的&#xff0c;看到作者跟网友的回复说是用的图像匹配算法&#xff0c;我就在网上搜索相关资料&#xff0c;最终找到一篇文献。文献中对该算法的评价很高&#xff0c;满足制导系统…

为你摘星辰

欢迎来到程序小院 为你摘星辰 玩法&#xff1a;鼠标控制人物方向&#xff0c;点击鼠标键上升人物&#xff0c;经过⭐️⭐️吃掉获得分数&#xff0c;共三次生命&#xff0c;碰到红色障碍物减去一次生命&#xff0c; 人物掉落底部游戏结束&#xff0c;看你获得多少分^^。开始游…

排序算法的空间复杂度和时间复杂度

一、排序算法的时间复杂度和空间复杂度 排序算法 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 冒泡排序 O(n) O(n) O(n) O(1) 稳定 直接选择排序 O(n) O(n) O(n) O(1) 不稳定 直接插入排序 O(n) O(n) O(n) O(1) 稳定 快速排序 O(n…

ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端系统测试安装教程

播资源提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff01;…

【TASKING】如何提高编译器的编译速度

文章目录 前言一、How to Improve the compilation speed.1.1、Cache generated code to improve the compilation speed1.2 Influencing the Build TimeSFR File&#xff08;勾了可能会报错&#xff0c;好像得配合include一起用&#xff0c;暂未研究清除&#xff0c;仅供参考&…
最新文章