
C++
文章平均质量分 65
深海Enoch
我们的目标是星辰大海~
展开
-
【Windows】Windows 平台使用 MinGW 编译程序遇到报错 cannot execute binary file: Exec format error 的一种原因
exec format error 原因很多,其中一个原因可能是 ELF 文件依赖的某个静态依赖库存在问题。原创 2023-01-21 21:18:33 · 3841 阅读 · 0 评论 -
【C++】慎用 erase(iterator),尤其在多线程中
不要使用 erase(iterator),除非你确定这个容器非空,并且 iterator 是正常值。原创 2022-10-10 18:43:12 · 515 阅读 · 0 评论 -
【Build】关于-fPIC, -fpic, -fpie, -fPIE的一点理解
fPIC fPIE 有什么区别转载 2022-07-01 16:24:20 · 1131 阅读 · 0 评论 -
CMake include_directories 和 target_include_directories,头文件的搜索顺序
业务中遇到个问题,引用了 jsoncpp 这个库之后,需要引用其头文件,但其头文件进一步引用了 jsoncpp 安装位置的其他头文件,但如果一台 Linux 机器上在不同的路径安装了两个不同版本的 jsoncpp 库,并且这两个路径都是该项目的头文件包含路径,那么,编译器会先找哪个路径下的头文件呢?带着这个问题,我开始翻阅 camke 的官方文档,由于是全英文版,读起来还是很费劲,因此先翻译出来。翻译完之后发现,include 的顺序跟翻译关系不大,因此,又将文档翻译写到了后半段,而把实验写到了前半段。.原创 2022-05-10 18:30:46 · 3423 阅读 · 0 评论 -
【AVD】FFmpeg 音频编码时 SampleFormat 的选择,报错 “Specified sample format s16 is invalid or not supported.“ 的解决
最近业务需要一个转码接口,这个转码接口将用于各平台(Linux、Android、iOS 等),在开发过程中发现,整个接口在 Linux 上运行良好,但在 Android 端却无法正常转码,根据自己添加的 Log 发现,在初始化音频编码器时发生了问题。经调试发现,Android 端...原创 2022-03-22 09:54:23 · 1791 阅读 · 0 评论 -
【C++】编译时遇到链接器报错 undefined reference to `vtable for xxx::xxx()` 的一种原因
最近业务中编译代码时遇到个问题。搜索解决方案时有点儿费劲。特此记录一下。参考某 博文,报这个错的原因是父类xxx中有虚函数未实现。这个未实现的虚函数,不一定是构造函数和析构函数。而是这个父类中所有定义的虚函数。因此,解决这个报错,要么给虚函数一个默认实现,例如 virtual void Function() {},要么直接定义为纯虚函数,即 virtual void Function() = 0;。...原创 2022-03-17 10:40:49 · 2397 阅读 · 0 评论 -
【AVD】简述 C++ 解码 HEIF HEIC 图片
一个好用的 C++ 库解码 HEIC 格式图片原创 2021-12-25 23:46:56 · 4496 阅读 · 1 评论 -
【C++】fstream 读文件基本用法 以及 不要使用 using namespace std
不要使用 using namespace std;fstream 打开、读取文件的基本方法。原创 2021-12-24 11:26:53 · 1501 阅读 · 0 评论 -
【AVD】C++ 获取 PNG 图片宽高信息
之前写过一个使用 FFmpeg 类对图片实现了解码、转码、裁剪、缩放等功能,发现比 ImageMagic 快多了。详情见 【AVD】杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了。但是,在文章 【AVD】C++ 不解码获取 JPG 图片宽高、旋转信息等 EXIF 信息 中提到过,如果我们只需要获取图片的宽高信息,而不用解码图片时,现有的 FFmpeg 代码并不能在解码之前得到一些格式的图片,现在已知的 PNG、JPG 均不能获得,而 GIF 是可以.原创 2021-12-23 09:44:31 · 1450 阅读 · 0 评论 -
【AVD】C++ 不解码获取 JPG 图片宽高、旋转信息等 EXIF 信息
不解码,使用 C++ 类来快速获取 JPG 文件的宽高及旋转信息。原创 2021-12-22 21:54:34 · 3764 阅读 · 0 评论 -
【AVD】 FFmpeg 获取 JPG 图片旋转信息等 Exif 信息
前段时间写了篇 杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了,后来发现有个问题,有些 JPG 图片是带有旋转信息的,如果只解码,不获取它的旋转信息,将导致图片的方向错误。av_dict_get那如何才能用 FFmpeg 来获取 JPG 的旋转信息呢?查过很多资料,最后终于找到一种方法。由于再次查找时又要翻阅多篇文章,因此记录在此。答案就是使用 av_dict_get 这个方法。首先,要完成使用 FFmpeg 对 JPG 图片的解码过程,得.原创 2021-12-22 13:49:00 · 3161 阅读 · 0 评论 -
【C++】尽量使用 snprintf 而非 sprintf 来保证内存安全,防止类实例的私有成员变量被改写
类的实例的私有成员变量被改写最近业务中遇到一个很奇怪的问题,在某些状态下,一个实例的首个指针成员变量的值(即指针指向的地址)被修改。原本这个指针变量的值为 0x7555555aa5555580,结果在不知道何时被改写成了 0x7555555aa5555500。如果在这个类的声明时,在该指针成员变量之前声明一个 int,则发现那个 int 会在某刻被改写,虽然成功绕过了因指针成员变量的值被改写而导致的错误地址使用。但是,这并不是个优雅的解法。sprintf 的锅经过同事两三天研究尝试,终于发现,是在上层原创 2021-12-22 10:48:01 · 633 阅读 · 1 评论 -
【Tools】VSCode 不提示错误,VSCode C/C++ Intellicode 不用红色波浪线提示错误
在设置中关闭了按住 Ctrl 和 逗号, 或者 File->Preference->Settings(文件->首选项->设置),从 Settings(设置) 页面最上方的搜索栏里搜索 squiggles,有一项 Error Squiggles,把它改为 Enable 或者 EnabledIfIncludesResolve。在 settings.json 中关闭了如果从设置中打开了,还是不行。或者你发现,在你的 workspace 里,有的项目行,有的项目不行,那就很可能是项目设原创 2021-12-03 17:18:10 · 7829 阅读 · 9 评论 -
C++中的delete和delete[ ]的区别
以前看书的时候,书上说使用new申请的内存,释放时用delete,使用new [ ]申请的内存释放时要用delete [ ]才行,这两个一定要记住,申请时用了方括号,则释放时也要加上方括号,否则就会出错。但是并没有解释为什么这样,会出什么错。今天正好看到这个,记录下。关于动态申请的内存,分两种情况:基本数据类型的分配和自定义数据类型的分配。两者不同。1、基本数据类型对于基本数据类型,假如有如下代码int *a = new int[10];…delete a; // 方式1delete [转载 2021-08-31 11:39:11 · 195 阅读 · 0 评论 -
【AVD】杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了
最近工作中遇到一个需求。现有代码中的图形库使用 ImageMagic 加载图片并做简单处理,但是在移植到 iOS 平台的过程中遇到了些问题。于是找到我,看能否用 FFmpeg 实现图片的从文件中读取加载、存储到文件中、以及缩放、裁剪等简单处理,并对比与 ImageMagic 相关功能的效率于是就边学边做,用 FFmpeg API 接口实现了一个 MyImage 类,提供 Load(string filename), Load(uint8_t* buffer, int w, int h, AVPixelF.原创 2021-07-02 00:11:09 · 714 阅读 · 3 评论 -
【AVD】FFmpeg av_packet_unref() 不严谨导致的一次内存泄漏,每次 6MB
FFmpeg 中 av_read_frame 会对 AVPacket 进行初始化,申请 6MB 内存,无论读取成功或失败,均需要使用 av_packet_unref 进行释放。原创 2021-06-11 17:29:53 · 5992 阅读 · 0 评论 -
【C++】打印程序执行时间的两种方法(分别以秒和时钟个数为单位) <time.h> 和 <ctime>
最近调试代码时发现,新架构的实现比旧架构肉眼可见地慢了很多。但是又不确定是哪个环节出了问题。于是,便需要在特定的环境中打印程序语句的执行时间,来对比判断,到底是哪个过程比原来花费了更多的时间。<time.h> 可以打印秒级时间起初,我想直接用工程中就有的 <time.h> 头文件的相关接口来打印。具体使用方法如下:#include <time.h>// ....int PAVFastFileEncodeTool::EncodeOneFrame(uint8_t.原创 2021-02-07 23:29:02 · 2744 阅读 · 1 评论 -
【Linux】【C++】使用 inotify 监控 ffmpeg 命令行分段渲染是否有分片完成
单线程使用 inotify 监控文件夹变动inotify 的用法网上也有不少,但是以讲解实现原理居多。几个示例也大多类似。本文总结一种单线程中,如何使用 inotify 监控文件夹中的文件变动。具体地说,就是 ffmpeg 命令行渲染音视频文件时,每渲染一帧,我需要知道是否有一个分片已经渲染完成。最新 inotify 用法#include <sys/inotify.h>....// when initint in_fd = inotify_init1(IN_NONBLOCK)原创 2020-11-17 09:40:24 · 404 阅读 · 0 评论 -
【C++】使用 nlohmann 解析 json 文件
nlohmann 是德国工程师,以其名字为工程名的 nlohmann/json 项目又被成为 JSON for Modern C++。网上常见如何使用 nlohmann 生成 JSON 文件的中英文资料。但如何使用 nlohmann 解析 JSON 文件的 资料 不多,或者,不够清楚直接。其实,工程的 README.md 写得也算清楚。但是对于从未接触过 JSON 文件的新手来说,还是不太友好。此篇主要向未接触过 JSON 文件的新手介绍如何快速使用 nlohmann 解析 JSON 文件。工程引.原创 2020-07-26 17:12:28 · 24345 阅读 · 10 评论 -
【C++】常用 Makefile 语法
# Rules of makefile:# target ... : prerequisites ...# (\t)command# ...# if there is no foo.make or any files whose name end up with .mk, the make will exit with errorinclude foo.make *.mk# It won't exit with error code if perhapsError.mk has er原创 2020-07-26 16:13:28 · 309 阅读 · 0 评论 -
android.mk 与 makefile文件的区别
makefile文件控制整个工程的编译规则,比如指定需要生成哪些目标文件,指明生成这些目标文件依赖哪些源文件,指明生成的目标文件放在哪个文件夹下等等。而make就是一个命令工具,可以解析makefile文件中的指令的一个命令工具。android.mk也是一样的功能,只不过它是android编译环境下的一种特殊的“makefile”文件, 它是经过了android编译系统处理的。所谓android编译系统,就是android顶层目录下的build目录里面的一系列编译控制文件,其实就是一系列makefile文转载 2020-07-15 15:40:54 · 4483 阅读 · 0 评论 -
do {...} while (0) 在宏定义中的作用
如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍。然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间。在很多的C程序中,你可能会看到许多看起来不是那么直接的较特殊的宏定义。下面就是一个例子:#define __set_task_state(tsk, state_value) \ do { (tsk)->sta...转载 2020-02-06 11:12:37 · 183 阅读 · 0 评论 -
【C++】一图读懂 C++ 成员变量在不同位置的初始化顺序(声明、列表、构造函数)
如下图所示,可知,成员变量声明时的初始化会最先执行,然后是列表中,然后是构造函数中的。后者均会覆盖前者。原创 2019-12-19 14:54:08 · 275 阅读 · 0 评论 -
【Tools】 VSCode Debug 报 g++.exe No such file or directory fatal error no input files.. 的解决方案
昨天搭建了 VSCode Cpp 断点调试环境,中午还能跑的,到了傍晚就开始报错了。按照我发布的文章搭建的环境,按 F5 试图断点调试时,报错如下:注意看 VSCode 集成的 TERMINAL 里的报错g++.exe: error: e:ProjectsVSCodeCppTest5srctest.cpp: No such file or directory这里的 e:Projects...原创 2019-10-24 11:27:25 · 11998 阅读 · 4 评论 -
【Tools】 VSCode Cpp 断点调试环境搭建(极速版)
用 VSCode 写代码有段时间了,最近项目不忙,才得空学习一下有关用法。现在发现,VSCode 中集成了 Terminal,完全不需要对着一个文件右键,然后选择 Reveal in Explorer,然后再 git bash here,再进行相关操作。直接用 Ctrl + Shift + `(~) 就能打开终端,并且实现 git 操作、编译命令等操作。工作中经常需要验证一些代码片段是否能够正...原创 2019-10-24 10:32:06 · 1260 阅读 · 0 评论 -
【C++】sscanf 的返回值
sscanf() 的返回值,举例来说int cnt;char str[256] = "";if (!sscanf(str, "cnt = %d", &cnt)) return;if (cnt == 0) return;float * point = new float[cnt];结果,崩溃,backtrace 显示崩溃在 new 操作上。如果打 log,可知,cnt 可能...原创 2019-10-12 17:43:43 · 6774 阅读 · 0 评论 -
【C++】 一张图说明字符串数组长度的获取方法
原创 2019-10-10 14:36:33 · 227 阅读 · 0 评论 -
【Tools】VSCode Cpptools 不提示类成员变量的一种解决方案
VS Code Cpptools 不提示类的成员变量自从被换了一台开发机之后,VS Code 一直不能很好的提示代码。今天重装了好几次 C/C++ 以及 C++ Intellisense Extensions,仍然不起效,于是挨个查看了一下 VS Code Settings 中 Extensions 中关于 C/C++ 的配置项。发现:有一项名为 C_Cpp: Intelli Sense E...原创 2019-08-24 10:56:18 · 7854 阅读 · 4 评论 -
【定制Android系统】Android O Camera(1)——简单梳理 Camera1 的 setParameters 通路.2(未完不续)
需求:接上一篇,疏通 Camera1API 的 setParameters 通路,按照分析,应该调用到 CameraClient.cpp 的 setParameters,然后进入 HAL 层。然而,通过打印 Log 发现,并没有走到 CameraClient 类,而是走进了 Camera2Client 类。CameraService::makeClient()在 Open Came...原创 2019-02-18 10:47:35 · 420 阅读 · 3 评论 -
【C++】【指针】把指针传出去使用的函数,指向指针的指针
需求:在函数中 new 一个变量,并将其地址传出去给函数调用者使用。今天在 coding 时遇到一个错误。我在 Ctrl 类写了一个成员函数 int init(Camera *p),并声明了一个成员变量 Camera *m_pC然后在该函数的定义中这么写的:int Ctrl::init(Camera *p){ m_pC = new Camera(); p = m_...原创 2018-09-13 17:30:36 · 1591 阅读 · 1 评论