ubuntu下qrencode arm 环境编译和使用

我有一个Linux 环境 V3S的qrm开发板,我需要在开发板上实现一个生成二维码的功能,于是想到了qrencode 这个库。

过程如下:

1,下载qrencode 源码(自行百度下载)

2,打开源码,可以看到源码里有一个configure 的配置文件

这个文件就是斌阿姨qrencode.so文件的关键配置文件,如果我们想编译当前ubuntu 的linux环境下的.so文件,那么我们只需要执行:

./configure
make
sudo make install

就可以将编译出来的so库安装到当前ubuntu电脑里,如果想指定安装路径,只需要

执行如下指令:

./configure --prefix=/path/to/install/directory
make
sudo make install
可以看到,执行配置文件的时候多了一个路径

3,那么如何编译V3S开发板环境下的libqrencode.so呢?

此时我们就需要根据自己的交叉环境进行配置了。

我自己写了一个脚本,脚本内容如下:

#!/bin/sh
export CC=/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-gcc
export CXX=/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-g++
export AR=/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-ar
export AS=/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-as
export LD=/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-ld
export RANLIB=/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-ranlib
export STRIP=/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-strip./configure --host=arm-linux-gnueabihf --prefix=/home/wangxiaojing/qrencode-4.1.1/arm

在make 之前,我先执行这个脚本,就可以生成arm版本的.so文件

其中 /home/wangxiaojing/qrencode-4.1.1/  是我的源码目录,我在改目录下新建了一个arm目录

编译完成后就会生成libqrencode.so 以及各种编译后的文件到这个目录里

可以看到export CC    export CXX  AR LD 等这些环境变量都设置成了自己交叉编译环境的路径,可根据自己环境惊醒配置,这样就可以编译出适配自己开发板的.so文件

4,代码如何实现生成二维码的功能。,这里我封装成一个方法如下:

void generateMonoQRCode(const QString& data, const QString& filePath)
{QRcode* qrcode = QRcode_encodeString(data.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1);if (qrcode != nullptr) {QImage image(qrcode->width, qrcode->width, QImage::Format_Mono);for (int y = 0; y < qrcode->width; y++) {for (int x = 0; x < qrcode->width; x++) {unsigned char b = qrcode->data[y * qrcode->width + x];image.setPixel(x, y, b&0x01 ? 0 : 1);}}QImageWriter writer(filePath, "png");writer.write(image);QRcode_free(qrcode);}
}

传入要生成二维码的数据,和要生成文件的路径,就可以生成一个二维码到这个路径下面,路径是包含文件名的。

生成后的图片可能大小尺寸可能过大或过小,此时我们需要再写一个方法用来改变这个二维码的大小:

void scaleImage(const QString &inputFilePath, int scaledWidth, int scaledHeight,QString& outputFilePath) {// 加载图片QImage inputImage(inputFilePath);if (inputImage.isNull()) {qDebug() << "图片加载失败";return ;}// 缩放图片QImage scaledImage = inputImage.scaled(scaledWidth, scaledHeight);// 保存缩放后的图片if (scaledImage.save(outputFilePath, "PNG")) {qDebug() << "图片缩放成功,保存路径为:" << outputFilePath << endl;} else {qDebug() << "图片缩放失败";return ;}}

需要引入头文件:

#include <QTextCodec>
#include <QPainter>
#include <QImage>
#include <QWidget>
#include <qrencode.h>
#include <QImageWriter>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TinyXML-2介绍

1.简介 TinyXML-2 是一个简单、小巧的 C XML 解析库&#xff0c;它是 TinyXML 的一个改进版本&#xff0c;专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库&#xff0c;并且可以很容易地集成到项目中。 tinyXML-2 的主要特点包括&#xff1a…

外设寄存器的映射到内存地址空间的过程

外设寄存器的映射到内存地址空间的过程称为内存映射I/O&#xff08;Memory-Mapped I/O&#xff0c;MMIO&#xff09;。这种映射是硬件设计的一部分&#xff0c;在芯片设计过程中由硬件工程师完成。以下是这个过程的一些重要步骤&#xff1a; 硬件设计&#xff1a;在微控制器或处…

你是我的荣耀 | 林先生:从酷爱数学到毕业走向数据分析岗位

人物背景&#xff1a; 研究生国家奖学金、本科生国家奖学金、学业奖学金一等奖、上海市优秀毕业生&#xff1b; 应用统计专业 CPDA优秀学员 ## 为什么选择数据分析相关专业 我是应用统计专业的一个应届毕业生&#xff0c;目前在一家上海市属的国企&#xff0c;从事数据分析相关…

远程工作的数据安全挑战和解决策略

随着远程工作的普及&#xff0c;数据安全面临了前所未有的挑战。企业在应对这些挑战时&#xff0c;必须采取切实有效的策略来保护敏感信息。以下是远程工作数据安全的主要挑战和相应的解决策略&#xff1a; 数据安全挑战 设备丢失或被盗&#xff1a;员工在外工作时&#xff0c…

ldap对接jenkins

ldap结构 配置 - jenkins进入到 系统管理–>全局安全配置 - 安全域 选择ldap - 配置ldap服务器地址&#xff0c;和配置ldap顶层唯一标识名 配置用户搜索路径 - 配置管理员DN和密码 测试认证是否OK

小组练习:请列出关于创新感受最深的几点启发

创新是推动社会进步的关键因素&#xff1a;无论是科技、教育、艺术、商业还是其他领域&#xff0c;创新都是推动其发展的主要动力。只有不断创新&#xff0c;才能使社会不断发展和进步。 创新需要勇气和决心&#xff1a;创新往往意味着打破常规&#xff0c;挑战现状。这可能会…

AIGC技术带给我们什么?基于AIGC原理及其技术更迭的思考

AIGC技术带给我们什么&#xff1f;基于AIGC原理以及技术更迭的思考 前言 AI&#xff0c;这个词在如今人们的视野中出现频率几乎超过了所有一切其他的事物&#xff0c;更有意思的是&#xff0c;出现频率仅次于这个词的&#xff0c;几乎都会加上一个修饰亦或是前缀——AI&#…

ROS机器人实用技术与常见问题解决

问题速查手册&#xff08;时实更新&#xff09;更加全面丰富的问题手册记录 1.机器人使用GPARTED挂载未分配空间 需要在图型界面下操作&#xff0c;建议使用no machine连接 安装gparted磁盘分区工具, sudo apt-get install gparted -y 启动软件 sudo gparted 点击磁盘/内存…

如何使用vue脚手架创建项目

前言 使用vue搭建项目的时候&#xff0c;我们可以通过对应的cmd命令去打开脚手架&#xff0c;然后自己配置对应的功能插件 说明&#xff1a; 要使用Vue脚手架创建项目&#xff0c;你需要先确保你已经安装了Node.js和npm&#xff08;Node.js的包管理器&#xff09;。然后&#…

热敏电阻怎么进行性能测试?并以LabVIEW为例进行说明

过程也可用于执行热敏电阻测量。RTD和热敏电阻遵循非常相似的功能原理&#xff0c;测量步骤与下面提供的步骤相同。有关热敏电阻的更多信息&#xff0c;请参阅本文档。 查找设备引脚排列 在连接任何信号之前&#xff0c;请找到您的设备引脚排列。 打开NI MAX并展开设备和接口。…

视频素材库在哪里找免费手机版?8个可以用手机浏览的素材网

在视觉内容占据主导地位的今天&#xff0c;合适的视频素材可以大大提升项目的吸引力和效果。以下列出的视频素材网站为广告制作者、社交媒体策略师及电影制作人提供了从传统到现代风格的各种视频素材选择&#xff0c;满足不同的创作需求。 1. 蛙学府&#xff08;中国&#xff…

PyGame 文字显示问题及解决方法

在 Pygame 中显示文字时可能会遇到一些问题&#xff0c;例如文字显示不清晰、字体不正确或者文字位置不准确等。以下是一些常见的问题及其解决方法&#xff0c;具体情况可以看看情况。 1、问题背景 一位用户在使用 PyGame 库进行游戏开发时&#xff0c;遇到了一个问题&#xf…

单片机为什么能直接烧录程序?

在设计芯片的时候&#xff0c;关于烧录的环节是一个不得不考虑的问题。首先排除掉&#xff0c;由外部硬件直接操控FLASH的方案&#xff0c;这个方案有很多缺点。 1、每个IC使用的FLASH型号各不相同&#xff0c;每种型号的FLASH的烧录命令和流程都有差别&#xff0c;这会导致烧…

Mysql .frm 和 .ibd 文件区别

在 MySQL 中&#xff0c;.frm 和 .ibd 文件是数据库文件系统中的重要组成部分&#xff0c;它们分别承担着不同的角色&#xff1a; .frm 文件&#xff1a; 这种文件类型是用于存储表的结构定义的。每当您在 MySQL 中创建一个表时&#xff0c;系统就会为该表生成一个对应的 .frm …

完全背包基础题(第三十八天)

377. 组合总和 Ⅳ 题目 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 答案 class Solution {public int combinationSum4(int[] nums, int…

服务器关机前未退出xampp导出MySQL无法启动

背景解决 五一放假&#xff0c;服务器关机了&#xff0c;但是关机前没有正常关闭数据库服务&#xff0c;导致数据库无法启动&#xff01; 查看错误日志如下 从报错信息可以看出是MySQL这个服务相关文件出现问题了&#xff0c;解决思路&#xff1a;重新安装xampp 重新安装xam…

automa警惕通过点击元素打开新的标签页,因为你可能会被他蒙蔽!

大家好&#xff0c;我是大胡子&#xff0c;专注于研究RPA实战与解决方案。 我们经常用到automa里面的【点击元素】组件&#xff0c;但要警惕通过点击元素打开新的标签页&#xff0c;例如下面这个场景&#xff0c;点击公众号的图文消息&#xff0c;之后&#xff0c;要自动输入标…

self-attention 的 CUDA 实现及优化 (上)

self-attention 的 CUDA 实现及优化 (上) 导 读 self-attention 是 Transformer 中最关键、最复杂的部分&#xff0c;也是 Transformer 优化的核心环节。理解 self-attention &#xff0c;对于深入理解 Transformer 具有关键作用&#xff0c;本篇主要就围绕 self-attention 展…

QT--2

Qt界面设计 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFla…

VBA 批量处理Excel文件

目录 一. 批量创建Excel文件1.1 VBA的方式1.2 Powershell方式 二. 批量删除文件三. 批量重命名文件四. 合并多个Excel数据到一个Excel文件中 一. 批量创建Excel文件 1.1 VBA的方式 Sub CreateFiles()Dim strPath As String, strFileName As StringDim i As Long, rDim pathSe…