当前位置: 首页 > news >正文

【2017-11-12】交叉编译libzbar和libjpeg的简单笔记

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2017-11-12| 标题:交叉编译libzbar和libjpeg的简单笔记分类:编程 / C && C++ |标签:C&&C++·zbar·libjpeg


交叉编译libzbar和libjpeg的简单笔记

    • zbar
      • 正常编译
      • 交叉编译
    • libjpeg
      • 正常编译
      • 交叉编译
    • DEMO

最近项目上需要使用二维码识别,网上简单的搜索了下相关知识,这里简单的笔记下流水账。

zbar

首先下载zbar源码,官方网址:

解压后发现是configure这种方式编译的。

正常编译

cstriker1407:/zbar/zbar-0.10$ ./configure--help`configure' configures zbar0.10to adapt to many kinds of systems. 。。。。。。 。。。。。。 Report bugs to<spadix@users.sourceforge.net>.

由于项目只用于识别二维码,因此简单起见,去掉所有的编译可选项。

cstriker1407:/zbar/zbar-0.10$ ./configure --disable-video --without-imagemagick --without-xv --without-xshm --without-gtk --without-python -without-qt --disable-assert 。。。。。。。。 。。。。。。。。 cstriker1407:/zbar/zbar-0.10$make。。。。。。。。 。。。。。。。。

编译完成后的库就在 zbar/.libs/ 中。

交叉编译

cstriker1407:/zbar/zbar-0.10$CC=XXXXXXXX/bin/arm-unknown-linux-uclibcgnueabi-gcc ./configure --disable-video --without-imagemagick --without-xv --without-xshm --without-gtk --without-python -without-qt --disable-assert--build=x86_64-host=arm-unknown-linux-uclibcgnueabi --disable-shared cstriker1407:/zbar/zbar-0.10$make

libjpeg

libjpeg的下载地址
【 https://sourceforge.net/projects/libjpeg/ 】

正常编译

cstriker1407:/libjpeg/jpeg-9b$ ./configure cstriker1407:/libjpeg/jpeg-9b$make

交叉编译

cstriker1407:/libjpeg/jpeg-9b$CC=usr/bin/arm-unknown-linux-uclibcgnueabi-gcc ./configure--build=x86_64-host=arm-unknown-linux-uclibcgnueabi cstriker1407:/libjpeg/jpeg-9b$make

DEMO

#include<stdio.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#include<zbar.h>#include<jpeglib.h>#include<jerror.h>staticvoid_convert_data(constunsignedchar*p_jpg_buffer,unsignedintjpg_size,int*width,int*height,void**raw){structjpeg_decompress_structcinfo;structjpeg_error_mgrerr;cinfo.err=jpeg_std_error(&err);jpeg_create_decompress(&cinfo);jpeg_mem_src(&cinfo,(unsignedchar*)p_jpg_buffer,jpg_size);(void)jpeg_read_header(&cinfo,TRUE);cinfo.out_color_space=JCS_GRAYSCALE;// cinfo.two_pass_quantize = TRUE;(void)jpeg_start_decompress(&cinfo);*width=cinfo.image_width;*height=cinfo.image_height;*raw=(void*)malloc(cinfo.output_width*cinfo.output_height*3);unsignedbpl=cinfo.output_width*cinfo.output_components;JSAMPROW buf=(void*)*raw;JSAMPARRAY line=&buf;for(;cinfo.output_scanline<cinfo.output_height;buf+=bpl){jpeg_read_scanlines(&cinfo,line,1);}(void)jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);}intmain(intargc,char**argv){if(argc<2)return(1);FILE*pFile=fopen(argv[1],"r+b");unsignedchar*p_ReadBuffer=malloc(81920);memset(p_ReadBuffer,0,81920);intfreadResult=fread(p_ReadBuffer,1,81920,pFile);printf("read%d ",freadResult);zbar_image_scanner_t*scanner=NULL;scanner=zbar_image_scanner_create();zbar_image_scanner_set_config(scanner,ZBAR_QRCODE,ZBAR_CFG_ENABLE,1);/* obtain image data */intwidth=0,height=0;void*raw=NULL;_convert_data(p_ReadBuffer,freadResult,&width,&height,&raw);free(p_ReadBuffer);printf("width:%d height:%d ",width,height);/* wrap image data */zbar_image_t*image=zbar_image_create();zbar_image_set_format(image,*(int*)"Y800");zbar_image_set_size(image,width,height);zbar_image_set_data(image,raw,width*height,zbar_image_free_data);/* scan the image for barcodes */intn=zbar_scan_image(scanner,image);/* extract results */constzbar_symbol_t*symbol=zbar_image_first_symbol(image);for(;symbol;symbol=zbar_symbol_next(symbol)){/* do something useful with results */zbar_symbol_type_ttyp=zbar_symbol_get_type(symbol);constchar*data=zbar_symbol_get_data(symbol);printf("decoded%s symbol \"%s\" ",zbar_get_symbol_name(typ),data);}/* clean up */zbar_image_destroy(image);zbar_image_scanner_destroy(scanner);return0;}
http://www.cnnetsun.cn/news/3446145.html

相关文章:

  • 【2018-01-19】【转】Linux的readv和writev
  • x86保护模式下的DispInt与DispAL函数解析
  • Windows 10系统操作与应用9小时视频教程
  • OpenVLA复现指南:具身智能工程化落地的完整实践
  • 开源AI CRM系统:架构解析与智能应用实践
  • 魔搭+OpenVINO加速Qwen3-TTS CPU语音合成实战
  • CrewAI单元测试实战:用Pytest与Mock构建AI智能体测试体系
  • AI模型在论文润色与学术翻译中的应用探索
  • crosswalk-mcp MCP 服务说明文档
  • ESXi 8 NVMe硬盘更换与系统迁移实战指南
  • 具身智能落地的三大支柱:世界模型、测试时验证与触觉融合
  • Unity跨平台蓝牙插件开发:从架构设计到实战避坑指南
  • Unity Figma Bridge架构解析:从设计稿到可运行UI的自动化转换
  • Ubuntu配置XRDP远程桌面与XFCE环境指南
  • OpenClaw企业级部署与AI Agent实战指南
  • 彻底解决 Oracle US7ASCII 中文乱码:一套无需换驱动、无需改数据库的方案
  • Spring Cloud Config 生产级密钥安全管理:从加密原理到七项核心实践
  • C++实现信奥P6014斗牛题:从暴力枚举到算法优化详解
  • RA4M2边缘AI手势识别与USB固件更新方案解析
  • C++日期类实现:从需求分析到运算符重载的完整实践
  • 从总部地标到商业综合体:照明工程行业的隐形实力样本
  • 2020年STM32/STM8开发技术趋势与实战技巧
  • CUDA C++ 高效入门第一章 -- 为什么要学习 GPU + CUDA
  • WSL2部署OpenClaw与飞书机器人对接实战指南
  • C++二维数组实战:从遍历到优化,手把手实现方阵对角线求和
  • C++自定义容器开发指南:从设计到实现的高性能数据结构实践
  • 【G780s连接远程TCP服务器案例步骤】
  • Linux文件删除操作原理与防误删实战指南
  • 鸿蒙前端调试原理与实战:HDC+ArkWeb+DevTools协同链路
  • MCP协议安全机制全解析:构建AI应用开发的防护体系