首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Yocto中为armv7ahf交叉编译Coqui + TFLite :共享对象中不允许R_ARM_TLS_LE32重定位

Yocto是一个开源的嵌入式Linux发行版构建工具,用于创建和定制嵌入式系统。armv7ahf是一种基于ARM架构的处理器型号。交叉编译是指在一种体系结构上编译代码,然后在另一种体系结构上运行。

Coqui是一个开源的语音识别框架,用于将语音转换为文本。TFLite是TensorFlow的轻量级版本,用于在边缘设备上进行机器学习推理。

R_ARM_TLS_LE32是一种ARM架构中的重定位类型,用于线程本地存储(Thread Local Storage)。

根据给出的问答内容,我将尝试给出完善且全面的答案:

在Yocto中为armv7ahf交叉编译Coqui + TFLite,涉及到的问题是共享对象中不允许R_ARM_TLS_LE32重定位。这是由于在ARM体系结构中,R_ARM_TLS_LE32重定位类型是不被允许的,这是因为线程本地存储(Thread Local Storage)的实现方式在ARM上是不同于其他架构的。

要解决这个问题,我们可以采用以下步骤:

  1. 确保Yocto构建环境已正确设置,并且具备对armv7ahf交叉编译的支持。
  2. 确认Coqui和TFLite的版本与Yocto环境兼容,可以通过查阅官方文档或源代码来获取最新的版本信息。
  3. 检查Coqui和TFLite的构建配置文件,确保没有使用R_ARM_TLS_LE32重定位类型。如果有,需要将其替换为合适的重定位类型,以符合ARM体系结构的要求。
  4. 执行交叉编译命令时,确保使用正确的编译选项和参数,以便生成适用于armv7ahf处理器的二进制可执行文件。
  5. 进行编译和构建过程时,密切关注任何与重定位相关的错误或警告信息,并根据具体情况采取相应的调整和修复措施。

对于Coqui和TFLite的优势和应用场景,我需要更多的信息才能给出具体的答案。另外,关于腾讯云相关产品的推荐和介绍链接地址,由于不能提及特定的云计算品牌商,我无法给出具体的链接地址。

总结:在Yocto中为armv7ahf交叉编译Coqui + TFLite时遇到共享对象中不允许R_ARM_TLS_LE32重定位的问题,需要确保编译配置和选项正确,以及注意与重定位相关的错误和警告信息。对于Coqui和TFLite的优势、应用场景以及腾讯云相关产品的推荐和介绍,需要提供更多信息才能给出详细的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

yocto | 基于Linux的定制系统跑Qt app(第一集)

点击上方"蓝字"关注我们01、引言>>>Yocto 项目是一个开源协作项目,能帮助开发者不同硬件架构的嵌入式产品,制作基于Linux的定制系统。...Yocto Project 提供了灵活的工具集和开发环境,使世界各地的嵌入式设备开发人员通过共享技术、软件堆栈、配置和用于创建这些定制 Linux 映像的最佳实践进行协作。...【6】注意安装过程如果想要强制停止,尽量只按一下 Ctrl + c ,之后yocto会结束后续的任务,但会把当前编译的任务完成。...scripts该目录包含在 Yocto 项目环境实现额外功能的各种集成脚本(例如 QEMU 脚本)。执行 . oe-init-build-env 后该路径会被添加到环境变量。...下载源代码后,构建系统会将源代码提取到本地工作区,该工作区应用补丁并运行配置和编译软件的通用步骤。

15010

平头哥 TH1520 RISC-V BeagleV-Ahead使用Thead-Yocto自定义构建系统 最详细版本

该项目提供了一套灵活的工具和空间,全世界的嵌入式开发人员可以共享技术、软件堆栈、配置和最佳实践,这些技术、软件堆栈、配置和最佳实践可用于嵌入式和物联网设备或任何需要定制 Linux 操作系统的地方创建定制的...元层数据 ,ubuntu18.04 终端下执行如下命令, ~家目录下指定: cd ~ git clone https://gitee.com/thead-yocto/xuantie-yocto.git...编译过程 很有可能会出现各种奇怪的错误,请不要着急,一般情况下是因为 配置不够,或者网络原因导致的,如果无法找到原因 可以 https://forums.100ask.net/c/elinuxdev...开发属于自己的 应用程序/产品,那么就需要构建出来一个 专门且配套的 SDK(交叉工具链 + 组件应用库和头文件) ,这样才可以使用配套的工具链来进行编译系统。...安装SDK ​ 安装SDK这里可以理解安装 工具链,Yocto工具自动把SDK工具链整合成了一个 .sh 脚本,只需要 终端任意目录执行 就可以自动安装。如下图所示。

47540
  • Android Tensorflow 示例代码 Pose Estimation项目编译

    Android Studio建议4.2版本以上。否则会有很多编译错误需要我们进行修改。 最小API 21。 3.1 tflite 模型介绍 如果不导入该四种模型库,在运行时App会崩溃的。...在这个示例Demo,展示了四种姿态模型。分别对应的模型文档: movenet_lightning.tflite:单姿势模型:该模型只能估计一个人的姿势。...如果你能正确访问外网,build 构造项目时Gradle会自动调用download.gradle里面的模型下载任务,从网络中下载相关模型文档,并进行命令, 然后存储assets目录下。...代码ml/MoveNet.kt文件第53行代码,标注了movenet_lightning.tflite的文件名称: // TFLite file names...." 3.2 编译 当我们的gradle版本正确,tflite模型导入正确。

    1.2K10

    程序生成之编译、链接、加载浅析

    编译 输入对象:程序源码 输出目标:目标文件 工具:编译器 如PC机常用编译gcc,ARM常用编译arm-linux-gcc 编译过程又可以被分为两个阶段:编译、汇编。 1....目标文件 生成的目标文件一般下列三种: 可定位(Relocatable)目标文件:由编译器和汇编器生成,可与其他可定位目标文件合并,创建一个可执行或共享的目标文件; 共享(Shared)目标文件:...一种特殊的可定位目标文件,可以链接(静态共享库)时加入目标文件,也可以加载或运行时(动态共享库)动态的被加载到内存并执行; 可执行(Executable)目标文件:由链接器生成,可直接通过加载器加载到内存...(2) 动态链接 动态链接指链接阶段仅仅加入一些描述信息,而程序执行时再从系统把相应动态库加载到内存。 在此种方式下,函数的定义动态链接库或共享对象的目标文件。...动态链接器(ld-linux.so)链接程序在运行过程,根据记录的共享对象符号定义来动态加载共享库,然后完成定位该可执行文件被执行时,动态链接库的全部内容被映射到运行时相应进程的虚地址空间。

    1.2K60

    一文领略链接与装载

    动态链接:动态链接器将可执行文件和共享对象需要定位的位置进行修正。 最后,进程的控制权转交给程序入口,程序终于运行起来了。 大致流程就是如此,不同平台细节处理上会有所不同,下面分析具体过程。...,编译器决议符号时有如下规则: 不允许强符号被多次定义。...定位入口的符号符号表的下标。 定位入口的类型。...和目标文件一样,共享对象数据段若有绝对地址引用,会生成对应的定位表,当动态链接器把这个共享对象装载后,会根据定位表将数据段的地址引用修正。这个方法叫做 装载时定位 。...最大的区别就是目标文件的定位静态链接时完成,共享对象定位是在装载时完成。 值得提出的是可执行文件也可以编译共享对象形式。 动态链接的实现 动态链接器 自举 。

    95131

    CSAPP---第七章-链接

    共享目标文件: 一种特殊类型的可定位目标文件,可以加载或者运行时被动态地加载进内存并链接。 汇编器和编译器生成可定位目标文件(包括共享目标文件),链接器生成可执行目标文件。...count是全局符号,根据type可知符号表示是一个数据对象类型,它所在节头部表索引为3,可以定位到.data节,再根据value表示.data节的偏移量得到对象地址,size表示对象大小。...当源代码经过编译生成可定位目标文件后,其中无法识别的符号引用,对应的call调用或者引用地址会被设置0,等到链接定位时进行地址。修正 代码的定位条目放在 .rel.text 。...但这个方案面临两个问题: 现代操作系统不允许修改代码段,只能修改数据段 如果print_banner函数是一个动态库(.so对象)内,修改了代码段,那么它就无法做到系统内所有进程共享同一个动态库。...那么问题来了:编译阶段怎么知道printf函数是glibc运行库的,而不是定义在其它.o 答案往往令人失望:编译器是无法知道的 根据前面讨论,运行时定位是无法修改代码段的,只能将printf定位到数据段

    86010

    AIoT应用创新大赛-基于TencentOS Tiny 的多功能行人检测仪

    尽管peson_detect是谷歌TFLite-micro的一个已有案例,但从学习的角度来说还是自己走一遍训练流程好,可能下一个应用场景的识别对象就不是行人了。...况且,YOLO-fastest中使用了上采样,这个步骤TFLite-micro是没有算子支持的,尽管可以自己实现,但效率应该就低了,所以还是需要对YOLO-fastest模型做进一步的裁剪。....a文件的源码,所以无法定位问题,得知eiq底层也是用的tflite后,于是索性自己移植了一遍,另一个考虑是:tos所支持的平台可能不只是NXP的芯片,以后如果使用到其它系列的芯片又该如何呢?...将生成的tflm-cmsis文件夹拷贝至MCUXpresso的source code目录,工程属性设置添加头文件路径(可以根据编译报错信息添加) 注意cmsis_gcc.h的版本,如果工程源码cmsis_gcc.h...调试优化 使用Release模式,关闭调试选项 编译优化等级O3 编译宏定义增加CMSIS_NN,使用CMSIS_NN算子加速 变量读写速度优化,配置全局变量保存位置SDRAM或者SRAM_OC (

    2.1K200

    【技术创作101训练营】TensorFlow Lite的 GPU 委托(Delegate)加速模型推理

    添加其他所需的方法 }; // 核心节点创建一个替代主 TfLite Graph 的子图的 TfLiteRegistration。...TFLite端侧 GPU 推理的支持方面,最早便支持了 OpenGL 的推理,2020年5月旬,基于委托代理方式也支持了 OpenCL 。 4....实际 APP ,多使用 C++ API,下面以 Android 系统的 C++ API 添加 GPU 代理例。...编译带 GPU 委托代理的TFLite并在ADB环境Benchmark 6.1 编译benchmark android-armv7:ADB环境 由于历史依赖库都是v7的原因,安卓平台实际多为armv7...,下面以ADB shell环境交叉编译Android-ARMv7版本的TFLite,详细步骤可以见readme的To build/install/run小节: # 拉去tensorflow代码,并切到最新

    5.3K220191

    地址无关码

    装载时定位 为了能够使共享对象在任意地址装载,我们首先能想到的方法就是静态链接定位。这个想法的基本思路就是,链接时,对所有绝对地址的引用不作定位,而把这一步推迟到装载时再完成。...这种情况与我们碰到的问题很相似,都是程序模块在编译时目标地址不确定而需要在装载时将模块定位。但是装载时定位的方法并不适合用来解决上面的共享对象中所存在的问题。...Linux和GCC支持这种装载时定位的方法,我们前面产生共享对象时,使用了两个GCC参数“shared”和“-fPIC”,如果只使用“- shared”,那么输出的共享对象就是使用装载时定位的方法...我们还需要有一种更好的方法解决共享对象指令对绝对地址的定位问题。...int foo() { global = 1; } 当编译编译 module.c时,它无法根据这个上下文判断 global是定义同一个模块的的其他目标文件还是定义另外一个共享对象之中,即无法判断是否跨模块间的调用

    99220

    《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接

    共享目标文件。一种特殊类型的可定位目标文件,可以加载或者运行时被动态地加载进内存并链接。   编译器和汇编器生成可定位目标文件(包括共享目标文件)。链接器生成可执行目标文件。...实际上,每个可定位目标文件. symtab中都有一张符号表(除非程序员特意用 STRIP命令去掉它)。然而,和编译的符号表不同, symtab符号表不包含局部变量的条目。...下面是 Linux编译系统采用的方法。   在编译时,编译器向汇编器输出每个全局符号,或者是强( strong)或者是弱(weak),而汇编器把这个信息隐含地编码定位目标文件的符号表里。...链接器处理称为目标文件的二进制文件,它有3种不同的形式:可定位的、可执行的和共享的。可定位的目标文件由静态链接器合并成一个可执行的目标文件,它可以加载到内存并执行。...加载时,加载器将部分链接的可执行文件映射到内存,然后调用动态链接器,它通过加载共享库和定位程序的引用来完成链接任务。

    2.6K31

    《计算机系统2》学习笔记

    链接过程,还会进行地址分配、定位和符号解析等操作。 静态链接与动态链接 完成两个任务:符号解析与定位。 符号解析: 建立符号引用和定义之间的联系。 定位每一个引用确定地址。...共享的目标文件 (.so) 特殊的可定位目标文件,能在装入或运行时被装入到内存并自动被链接,称为共享库文件,Windows 称其为 Dynamic Link Libraries (DLLs)。...符号解析 作用 将每个符号引用与它输入的可定位目标文件的符号表的一个确定的符号定义关联起来。 强符号 函数和已经初始化的全局变量。 弱符号 未初始化的全局变量。 规则 不允许存在同名强符号。...U空,链接成功,布局E模块拼接成可执行文件,完成符号解释和定位定位 定位由两步组成:定位节和符号定义,定位的符号引用。...定位节和符号定义 赋予指令和全局变量唯一的运行时内存地址。 定位的符号引用 修改代码节和数据节符号的引用,使其指向正确的运行地址。

    24320

    Shell命令(readelf)

    Linux,ELF是标准的可执行文件格式,其全称是Executable and Linkable Format。...-S 选项列出来的信息,有一项是Addr,这是程序运行时对应的段的虚拟地址,可以用这个选项查看可执行文件和可定位文件的区别,你会发现定位文件的全局变量、函数等符号的地址都是0,这也验证了这些符号需要链接定位编译原理...ELF 文件有 3 种类型,一种是如上所示的 Executable file 可执行文件,一种是可定位文件(Relocatable),另外一种是共享库(Shared Library) 。...Machine,指的是机器平台类型,使用ARM平台进行嵌入式开发时,会用到交叉工具链,编译生成的文件机器平台类型就不是Intel x86,而是ARM。...readelf还有很多有用的选项,帮助我们更精确理解ELF格式的内在细节,这些用法可以man手册查到。

    1.2K20

    动态链接的步骤与实现

    其实我们在前面分析地址无关代码时已经提到过,实际上使用PIC模式编译共享对象,对于模块内部的函数调用也是采用跟模块外部函数调用一样的方式,即使用 GOT/PLT的方式,所以 GOT/PLT没有被定位之前...所以对于bar()函数的调用,编译器只能采用第三种,即当作模块外部符号处理,bar()函数被覆盖,动态链接器只需要定位“.got .plt”,不影响共享对象的代码段 为了提高模块内部函数调用的效率,有一个办法是把...定位与初始化 当上面的步骤完成之后,链接器开始重新遍历可执行的文件和每个共享对象定位表,将它们的GOT/PLT的每个需要定位的位置进行修正。...定位完成之后,如果某个共享对象有“.init”段,那么动态链接器会执行“.init”段的代码,用以实现共享对象特有的初始化过程,比如最常见的,共享对象的C++ 的全局静态对象的构造就需要通过“init...dl start函数首先对ldso(以下简称ld x.y.z.sold.so)进行定位,因为ld.so自己就是动态链接器,没有人帮它做位工作,所以它只好自己来,美其名曰“自举”。

    1.4K20

    libatbus 的大幅优化

    重构工程配置脚本 为了拥抱Modern CMake,我对 atframework 中所有的项目(当然也包含 libatbus )进行了重构,主要是一方面重构整理最近几个项目编译交叉编译 openssl...也合并适应了给客户端用的交叉编译iOS、Android、Unreal Engine等平台使用的构建流程。...但是posix标准里这个路径是不能有子目录的,所以新版本版本的glibc里也不允许(一些老版本的glibc允许)。...然后如果又不兼容的版本,集群之间可以互相不主动连接,以防不断地尝试连然后断开。另外增加共享内存通道的版本号检查和架构校验,也是防止共享内存通道如果版本不兼容,随意attach上去可能会破坏数据。...未来计划 endpoint 离线后保留一段时间,如果期间连成功了自动重发 增加data sequence,事件去和切换节点的sequence重置 共享endpoint的写缓冲区(也许后面可以一句这个支持多路并行发包

    99720

    动态链接的相关结构

    、动态链接符号表的位置、动态链接定位表的位置、共享对象初始化代码的地址等。...动态链接定位共享对象需要定位的主要原因是导入符号的存在。...对于动态链接来说,如果一个共享对象不是以PIC模式编译的,那么毫无疑问,它是需要在装载时被定位的:如果一个共享对象是PIC模式编译的,那么它还需要再装载时进行定位吗?...是的,PIC的共享对象也是需要定位的; 对于使用PIC技术的可执行文件或共享对象来说,虽然它们的代码段不需要定位(因为地址无关),但是数据段还包含了绝对地址的引用,因为代码段绝对地址相关的部分被分离了出来...动态链接定位的相关结构 共享对象定位与我们在前面“静态链接”中分析过的目标文件的定位十分类似,唯一有区别的是目标文件的定位静态链接时完成的,而共享对象定位是在装载时完成的。

    1.7K20

    LD_LIBRARY_PATH和LIBRARY_PATH的区别

    目标文件(Executable and Linkable Format) 可定位(Relocatable)文件:由编译器和汇编器生成,可以与其他可定位目标文件合并创建一个可执行或共享的目标文件; 共享...(Shared)目标文件:一类特殊的可定位目标文件,可以链接(静态共享库)时加入目标文件或加载时或运行时(动态共享库)被动态的加载到内存并执行; 可执行(Executable)文件:由链接器生成,可以直接通过加载器加载到内存充当进程执行的文件...创建可执行文件,链接器必须要完成的主要任务: 符号解析:把目标文件符号的定义和引用联系起来; 定位:把符号定义和内存地址对应起来,然后修改所有对符号的引用。...动态链接(加载、运行时) 在此种方式下,函数的定义动态链接库或共享对象的目标文件。在编译的链接阶段,动态链接库只提供符号表和其他少量信息用于保证所有符号引用都有定义,保证编译顺利通过。...动态链接器(ld-linux.so)链接程序在运行过程根据记录的共享对象的符号定义来动态加载共享库,然后完成定位。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。

    1.2K40

    ELF文件及android hook原理

    Linux下,ELF可执行未见默认从地址0x08048000开始分配。 符号解析与定位 编译将”a.c”编译成指令时,它如何访问”shared”变量?如何调用”swap”函数?...与普通程序不同的是,动态链接模块的装载地址是从地址0x00000000开始的,这个地址是无效的,共享对象的最终装载地址在编译时时不确定的,而是在装载时,装载器根据当前地址空间的空前情况,动态分配一块足够大小的虚拟地址空间给相应的共享对象...我们还需要有一种更好的方法解决共享对象指令对绝对地址的定位问题。...程序开始执行时,动态链接器都要进行一次链接工作,会寻找并装载所需的共享对象,然后进行符号查找地址定位等工作,如此一来,程序的运行速度必定会减慢。....dynamic段 这个段里保存了动态链接器所需要的基本信息,比如依赖哪些共享对象、动态链接符号表的位置、动态链接定位表的位置、共享对象初始化代码的地址等。

    3.8K81

    Linux编译工具:gcc入门

    2. gcc的特点 gcc是一个可移植的编译器,支持多种硬件平台。例如ARM、X86等等。 gcc不仅是个本地编译器,它还能跨平台交叉编译。...汇编器生成的是可定位的目标文件,学过操作系统,我们知道,源程序地址是从0开始的,这是一个相对地址,而程序真正在内存运行时的地址肯定不是从0开始的,而且在编写源代码的时候也不能知道程序的绝对地址,...所以定位能够将源代码的代码、变量等定位内存具体地址。...hello.c 或 gcc -c hello.c -o hello.o 编译生成可定位目标文件 使用gcc时可以加上-Wall选项。...共享库有时候并不不在当前的目录下,为了让gcc能够找得到共享库,有下面几种方法: 拷贝.so文件到系统共享库路径下,一般指/usr/lib ~/.bash_profile文件,配置LD_LIBRARY_PATH

    4.7K50
    领券