7 q2nAmor

尚未进行身份认证

Android、C++、linux应用开发

等级
TA的排名 2w+

NDK撩妹三部曲—站住同学,我这有个C++的so库,底层运算效率飞起,想不想要?

NDK撩妹三部曲——站住同学,我这有个C++的so库,底层运算效率飞起,想不想要?从何说起?  前段时间,公司有个前端妹子找到我说:“Q哥,我想把我们项目的部分公共业务逻辑提取出来…”,话还没说完就被我打断了。“嗯,挺好的,抽个公共类吧”,我故作镇定的说道。“不是的,我想要…让你帮我用C++写一套,以后就能不区分平台的使用了嘛,你就帮帮我啪”,艹,打错了,是”吧“。咳咳,终于,妹子还是露出了本性。呵,女人!  算了,本着助人为乐的态度(主要还不是看长相),Q哥我决定帮助妹子实现这个伟大的愿望。欠揍,

2020-05-25 22:10:35

QT 跨平台开发(二)之现有项目在linux和windows下利用NDK 和 Cmake 编译为android so库

导航一. so库编译1. 命令行模式下编译2.QTCreator 工具编译上一篇:windows下qtcreator生成可供android调用的so库下一篇:准备工作在开始之前我们需要学习并做一些准备工作:QT 函数导出QT、QtCreator for android 、ndk(ndk下带有gcc和lang工具,推荐下载r16版本)、cmake、sdk、jdk 安...

2019-12-23 11:38:42

QT 跨平台开发(一)windows下qtcreator生成可供android调用的so库

首先,Qt For Android 环境搭建可以参考下面这篇文章:Qt For Android 开发环境配置完成之后我们再次尝试导出一个QT的so库。上面的步骤完成之后,可以看到QTCreator自动帮我们创建了这几个文件:我们对 Test 稍微改造一下,导出函数,而不是导出类,作为动态库时,导出类可能并不是很适用。//test.h#ifndef TEST_H#defin...

2019-12-20 17:18:10

windows 下查看 so 导出函数

1、安装Cygwin安装教程:Cygwin安装教程2、命令使用nm命令例如 nm -D xxx.so(-D或-dynamic选项表示:显示动态符号。该选项仅对于动态库有意义)得到的结果中以T开头的就是导出函数:用awk命令筛选出第二列为-T的行:$ nm -D libdemo.so | awk '{if($2=="T"){print $3}}'...

2019-12-20 10:34:50

Qt Creator 无法打开或者一打开就无响应的解决办法

Qt Creator版本:4.8.0 Enterprise不知道什么原因QTCreator无法打开了,双击无反应。解决办法一:找到AppData\Roaming\QtProject,删除或重命名目录下QtCreator.ini文件(这会重置QtCreator的默认设置),再打开QtCreator时会自动生成对应于默认设置的QtCreator.ini文件,此时恢复正常。AppData\Roam...

2019-12-19 17:00:18

YUV 420P 视频裁剪、拼接

一、YUV简介YUV(也称YCbCr)是电视系统所采用的一种颜色编码方法。其中 Y 表示亮度,也就是灰阶值,它是基础信号;U 和 V 表示的则是色度,UV 的作用是描述影像色彩及饱和度,它们用于指定像素的颜色。U和V不是基础信号,它俩都是被正交调制的.YUV与RGB视频信号相比,最大的优点在于只需占用极少的带宽,YUV只需要占用RGB一半的带宽。(摘自百度文库)YUV就是利用一个亮度(Y)...

2019-12-11 19:04:28

QT程序 windows窗口置顶和linux窗口置顶遇到的问题和解决方案

一、QT 窗口置顶一般情况下,我们开发QT桌面应用程序如需用到窗口置顶操作时,会这样做:setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);但经过尝试发现此方法会导致窗口被隐藏,再次调用 show方法又会导致闪烁,查看源码后发现在窗口被创建后(构造函数执行完成后),调用setWindowFlags会导致窗口被 hide,而在构造...

2019-12-09 14:58:59

QT利用opengl 进行视频裁剪、拼接,4宫格,9宫格

一、概述1.1 前言在上一篇文章我们讲了Y420P视频数据如何裁剪、拼接、旋转等,但是缺点也很明显,一是工作量大,代码量较大。二是容错率低,因为涉及到大量的浮点型计算,导致在数据拷贝的时候存在误差,可能渲染的时候Y、UV分量就产生问题,视频花屏、变形等。同时,YUV数据拷贝和计算的过程都是交给CPU进行,效率较低。而这篇文章我们采取另外一种更优方式,利用 opengl 顶点和纹理坐标做文章,...

2019-12-07 16:04:52

VLC 音视频播放,支持添加视频列表和循环播放

注:本文基于 C++ 代码讲述 vlc 音视频播放控制过程,且假设你已经集成好了VLC到你的项目中。一、初始化像播放单个视频一样,首先我们需要初始化 instancelibvlc_instance_t m_vlc = libvlc_new(0, 0);而不同于播放单个视频,我们需要的是 libvlc_media_player_t 实例,但是它只支持播放单个媒体,因此我们需要初始化另外一个...

2019-12-07 14:24:27

敏捷实践流程学习

敏捷的目的是及时沟通,高效交流达成一致,持续集成与迭代,提高效率与资源利用率,及时保证高质量交付。敏捷宣言:个体和互动 高于 流程与工具 工作的软件 高于 详尽的文档 客户合作 高于 合同谈判 响应变化 高于 遵循计划一、:召开IPM会议(BA主导,迭代计划会议)会议内容:(需要提前准备好原型,写好AC)PM讲解原型,然后团队提出问题,讨论合理流程,开发估算时间点。(可使用所有人猜拳...

2019-12-07 12:50:55

深入理解使用CMake编译 NDK 程序

使用 CMake 进行Android NDK编译的原理介绍Android Studio 2.2 及以后的版本默认使用CMake进行 NDK 编译, 其中最吸引人的地方是,在开发NDK程序时可以进行联机调试,这真是大在的方便了开发者开发NDK程序的效率了。 那么使用CMake编译NDK程序是否与我们之前介绍的使用ndk-build编译有很大的不同呢?下面我们就来一窥它的原理。前面我给大家介绍...

2019-12-05 15:37:29

winDbg 结合 pdb 分析 dump

一、概述VS 本身可以设置符号路径来调试 dump转储文件,但是某些情况下项目使用了其他第三方库(比如使用了 vlc),而出错原因在vlc内部,我们就无法找到出错原因。或者说项目拆分成动态库,而出错原因在某个库内部,有时候 VS 也无法分析出错误原因,因此我们需要借助其他更强大的 dump 分析工具如 windbg。1.1 下载地址:windbg 不用在网上下载,win10有自带的(但需要已...

2019-10-30 18:22:00

编程技巧:用标志位表示状态

在很多框架中, 我们都能看到类似 int xxx = 0x0010 这种代码, 我们只知道他表示状态, 很牛x, 但是具体为啥要这样, 或者它是如何表示多个不同状态的却全然不知.回顾位运算位运算符号列表:符号英文名中文名\OR或&AND与~NOT非^XOR异或>>-右移<<-左移...

2019-07-11 09:34:37

git常用命令-git stash(储藏)

1.1 情景再现假设在使用 git 时我们的应用场景是这样的(这也是大多数情况):老大要求小王在 2H内把线上的某个按钮换成节目图标,命名为 “变色001”,小王一看,卧槽,这简单了,然后慢慢的新建了一个本地分支 “变色001”,改呀改呀,写呀写呀。 突然,线上出紧急bug了,要小王在1H内修复,不然不让参加团建。但“变色001”的代码都写了一部分了,不可能放弃呀。小王急了,怎么办呀?1.2...

2019-07-08 18:06:35

QT插件学习系列(四) linux下试运行

QT插件学习系列(四) linux下试运行关于第一篇文章 QT插件学习系列(一) 初识QtPlugin 末尾提到的 linux 下的测试结果,因为 QT 代码一次编写,跨平台运行,因此我们的 Demo 在 linux下是通用的,下图是运行和测试结果(QTCreator 4.8 ubuntu 18.04):代码我没有做任何改动,可以看到,插件被正确加载,动态库也正确生成。关于 linux...

2019-06-03 17:23:16

QT插件学习系列(三) 插件间通信

QT插件学习系列(三) 插件间通信1、 概述前两篇文章学完我们可以从0开始写一个 QT 插件了,也有自己的简易版插件框架了。但是例子中只给出了单个插件的加载与调用,我们实现插件化的目的是为了扩展性,实际项目中会存在插件A,插件B,插件C。而这些插件之间怎么通信 ? 或者说怎么建立一种良好的通信结构,这既是一项必不可少的工作,更是完善我们插件框架的重要里程碑。在我们实现通信机制的时候,要考虑下...

2019-06-01 21:37:01

QT插件学习系列(二) 插件管理器

QT插件学习系列(二) 插件管理器1、 概述上文中展示了一个简单的 QT Low-API 插件实例,但是这却满足不了大型应用程序的实际场景,没有扩展性。而插件间的通信、加载卸载(释放内存)、插件元数据、插件生命周期、插件依赖等问题,便是我们要做的。在QT内部,高级 API 有 PluginManager 负责做这些事,但是低级 API 就需要自己写插件管理器来帮助我们解决这些问题。想象一台 ...

2019-06-01 21:32:12

QT插件学习系列(一) 初识QtPlugin

QT插件学习系列(一) 初识QtPlugin1、 概述为什么我们要学习插件化,其和 windows 导出 dll 有什么区别呢?导出的动态库如果缺失,程序不能运行。但插件可以。同一套代码,即可分别在 windows 下和 linux 下生成插件。QT 本身提供两种插件支持,一种称为高级 API,一种称为低级 API。高级API的作用是扩展 QT 程序本身,需要子类化 QT 提供的...

2019-06-01 21:30:18

C++ 多线程通信之 wait、notify、condition_variable 学习日志

C++ 多线程通信之 wait、notify、condition_variable 学习日志1、 C++ 11 线程认识在C++ 11标准库中提供了一种新的线程创建方式:thread t(func, parm);① t.detach(); ② t.join();detach 顾名思义即为工作线程和 UI 线程脱离,是一种异步操作。join 意味着阻塞,等待 func 结束才能继续...

2019-05-05 16:34:48

手把手教你 linux(ubuntu环境)下打包 QT 程序

linux (ubuntu环境)下发布QT程序到非开发机器1、ldd 查看动态库缺失首先,保证在开发机器上通过 QTCreator 能构建出项目并能运行成功。在 windows 平台下,我们使用 windeployqt 去拷贝动态库,而在 linux 下,也有对应的命令是 ldd 。来到 release文件夹下,使用 ldd VPlayer 命令查看 VPlayer(暂且称我们的程序名为 V...

2019-04-03 16:50:57

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享精英
    分享精英
    成功上传11个资源即可获取