weixin_40992846 2024-07-19 21:54 采纳率: 50%
浏览 7

arm-none-eabi-gcc交叉编译zbar编译报错

使用arm-none-eabi-gcc交叉编译zbar,configure选项--disable-pthread,编译报错

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-19 21:54
    关注

    引自免费微信小程序:皆我百晓生

    这个问题涉及到arm-none-eabi-gcc交叉编译器和ZBAR库的问题。首先,我们需要了解一些基本概念和技术。

    1. nanosleep函数是Linux内核中的一个系统调用,用于在用户空间等待一定时间后返回给用户空间。在您的程序中,您尝试通过将睡眠时间和信号处理错误作为参数传递给nanosleep函数来实现异步编程。然而,当errno为EINTR时,这可能导致程序崩溃。这是因为在操作系统级别,我们没有控制权限去修改睡眠时间和信号处理错误。

    2. 在C语言中,#define_zbar_mutex_lock#define_zbar_mutex_unlock等宏定义用于锁和解锁线程互斥锁。在您的代码中,这些宏定义看起来被误用。lock应该是pthread_mutex_lock而不是zbar_mutex_lock,同样地,unlock应该是pthread_mutex_unlock而不是zbar_mutex_unlock

    3. proc_video_handler函数试图获取proc->mutexproc->nutex指针,然后进行一些操作。但是,由于proc结构体中没有这些成员,所以这个访问会失败。

    4. proc_cache_polling函数试图初始化proc->thr_polling结构,但其中缺少必要的字段,导致编译错误。

    5. proc_cache_polling函数还尝试复制proc->pollingproc->thr_polling,这在proc结构体中并没有这样的映射关系。

    6. proc_cache_polling函数中有一个错误,它尝试在赋值前检查变量是否已存在。这会导致编译器报告未定义标识符错误。

    解决这些问题的方法可能包括以下几个步骤:

    1. 确保nanosleep函数正确使用了errnoEINTR
    2. zbar_mutex_lock替换为pthread_mutex_lock
    3. 删除proc->mutexproc->nutex指向的成员,并确保它们存在于proc结构体中。
    4. 确保proc->thr_polling结构中有正确的字段,例如numnun
    5. 确保proc_cache_polling函数在复制之前检查其源数据。

    如果你正在使用GCC进行交叉编译,可以考虑使用其他工具链(如Clang),因为GCC在ARM平台上的支持有限。此外,确保在构建过程中添加必要的依赖项,如ZBAR库和相关的头文件。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月19日

悬赏问题

  • ¥15 征集Python提取PDF文字属性的代码
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?