自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(400)
  • 收藏
  • 关注

原创 Mac 安装一系列工具文章汇总

安装 cmake安装 vscode=>终端在屏幕左上角的菜单栏中选择 terminal安装 brew/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"  ...

2024-09-24 16:00:00 107

原创 C++ 多线程知识汇总

https://zhuanlan.zhihu.com/p/194198073(防链接失效)程序使用并发的原因有两种:为了关注点分离(程序中不同的功能,使用不同的线程去执行),当为了分离关注点而使用多线程时,设计线程的数量的依据,不再是依赖于 CPU 中的可用内核的数量,而是依据概念上的设计(依据功能的划分);为了提高性能, 此时线程数量可以依据CPU的逻辑核心数目,这样可以使得每个线程...

2024-09-20 19:06:00 401

原创 网络准入小助手初始化失败原因

公司提供的网络准入小助手在输入服务器地址和端口号后,初始化过程一直提示失败在排除外部因素(服务器是正常的),这种问题一般出在用户电脑上,首先检查是否启动了代理服务器,发现没有启动关闭了防火墙和防御软件,依然初始化小助手失败最终发现是系统环境变量加了 HTTP_PROXY 和 HTTPS_PROXY,导致访问到代理地址上了,最终无法初始化失败删除了这两个 PROXY 变量,重启电脑后,联网...

2024-08-27 16:11:00 128

原创 DevEco Studio 调试三方库源码

有相关的官方文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-app-debugging-26-V5实操:将编译好的三方库文件和符号文件整理好在工程中添加对库文件的使用,一般是将库文件放到 libs/arm64-v8a 下点击顶栏的选项,Run->Edit Configuration...

2024-08-21 12:07:00 268

原创 编译 wolfssl 库

wolfssl github:https://github.com/wolfSSL/wolfssl编译 .lib 或者 .dllwolfssl 很好的提供了 win32 的工程=》sln 文件这样就不用折腾 CMakeLists 文件了,使用 Visual Studio 打开 sln 文件后,设置好 Static 编译库即可,开箱即用编译 .a 文件如果需要编译 ....

2024-08-20 17:54:00 306

原创 编译 onigmo 库

onigmo github:https://github.com/k-takata/Onigmo测试环境:Windows我编译库时习惯于在 vs code 下 git clone 文件后,再执行相应的编译操作而 vs code 提供的终端一般是 git bash 和 powershell在编译 windows 下运行的库=》.lib 和 .dll不能直接在 powershell 和...

2024-08-20 16:31:00 297

原创 cmake.js 的安装

安装 cmake-js 时遇到 npm ERR! code EUNSUPPORTEDPROXY 错误这种一般是代理问题,需要手动设置代理地址,如下:npm config set http-proxy [url][port] #代理地址+端口npm config set proxy [url][port]查看 cmake.js 的版本号npx cmake-js --versio...

2024-08-08 17:52:00 321

原创 近期在看

1. C++ Primer2. 深入理解 FFmpeg3. 鸿蒙 sdk 开发

2024-07-30 16:24:00 362

原创 Mac 命令行记录

1. 查看 .so 符号表objdump -T libxxx.so2. 查看文件大小ls -lf libxxx.so3. 查看 .a 架构信息lipo -detailed_info libxxx.a4.

2024-07-30 14:31:00 395

原创 FFmpeg 重打包

解封装涉及到很多接口的调用AVFormatContext: 初始化格式上下文,由 avfomat_alloc_output_context2(&oc, NULL, NULL, filename) 赋值作用:用于封装和解封装的核心数据结构是 AVFormatContext,它包含所有关于正在读取或写入的文件的信息。与大多数 libavformat 的结构一样,它的大小不是公共 ABI ...

2024-06-14 12:24:00 643

原创 HLS、HTTP+FLV、DASH

HLS、HTTP+FLV 和 DASH 是三种常见的流媒体传输协议,它们在技术实现、使用场景和优缺点方面都有显著的区别。以下是对它们的关系和区别的详细解释,以及当前最流行的流媒体传输协议的讨论。HLS(HTTP Live Streaming)开发者:由 Apple 开发。工作原理:将视频切片成小的 TS 文件,并生成一个 m3u8 播放列表文件。播放器下载 m3u8 文件...

2024-05-31 15:16:00 794

原创 C++ 的 mutable 引出的一系列思考

阅读多线程实战第六章第二节时,看到 mutable 关键词的使用,突然忘记它的含义=>https://github.com/xiaoweiChen/CPP-Concurrency-In-Action-2ed-2019/blob/master/content/chapter6/6.2-chinese.md进而引申到 mutable 的使用=>C++ 的 mutable 关...

2024-05-23 15:31:00 370

原创 git push

一天一个小“姿势”问题:如何在远端仓库中添加特定的分支答:git push upstream v0.1.0解释:upstream 是远端仓库的地址,v0.1.0 是当前分支的名字,会同步到远端分支(这边是新建一个远端分支)...

2024-05-22 19:42:00 374

原创 Windows 上 sentry-native v0.7.2 版本的使用

在我建议 sentry-native 社区添加 content: gzip 功能,并提交了一个 PR 帮助他们完成后,终于在 v0.7.2 中添加了该功能https://github.com/getsentry/sentry-native/releases/tag/0.7.2不过实际中使用与旧版本存在一些差距,主要在于 zlib 库的引用,所以记录下差异的地方和解决的方法sentry...

2024-05-22 19:30:00 355

原创 深入理解 FFmpeg 书籍笔记

知识点太多,目前只记录遇到的错误1. 在 Ubuntu 22.04 64位上编译 FFmpeg-0.6.3 时,使用 ./configure 配置时遇到如下错误ffserver.c: In function ‘rtsp_cmd_describe’: ffserver.c:2987:5: error: implicit declaration of function‘ff_url_sp...

2024-04-25 18:43:00 491

原创 electron 开发

教程:https://www.electronjs.org/zh/docs/latest/tutorial/quick-start系统:Windows 10工具: PowerShell文件目录:index.html main.js package.json 和 preload.js 是手动添加的,其余是编译生成的index.html<!DOCTYPE html>&lt...

2024-03-29 18:59:00 261

原创 视频编码学习

1. H.264 和 H.265 区别参考:https://winddoing.github.io/post/4a8fdf27.html

2024-03-14 11:44:00 152

原创 git merge 问题

远端分支更新后,本地需要使用 git pull 或者 git fetch 获取更新有时候会出现拉取后,本地分支新出现一个 merge commit,这个 commit 会干扰到项目 commit 的历史线所以我们一般在 git fetch 或者 git pull 后再使用 git reset --hard xxxx 来同步上下游的 commit 历史线(xxx 的上游最新的 commit 的...

2024-03-05 16:01:00 352

原创 IDA 反汇编 explorer

之前写过一篇关于 IDA 在无 dmp 文件下如何定位到崩溃点的文章,由于其中涉及到公司项目,就仅限自己看了正好今天看到一篇关于火绒软件误杀 explorer 的文章,并且有相关的复现过程文章已经概述的很清楚,不过缺少软件的调试步骤,借此机会补充一下该调试过程一共使用两个软件,IDA 和 010 Editor,以及调试文件,explorer.exe 和 pdb 文件,这两个文件可以从上面链...

2024-02-23 12:21:00 361

原创 使用 Visual Studio 断点调试 DLL

继上文说到使用 IDA 和 WinDbg 调试无 dmp 文件那么在有源码的情况下可以直接断点调试 DLL,目的是查看 DLL 内部的函数调用场景:程序执行到某个 DLL 时突然崩溃,先确定 Debug 生成的 DLL 在程序中运行是否也会有闪退如果有,则适用于 VS 断点调试操作步骤:在 Debug 下生成一个对应的 DLL注意:必须是 Debug 生成的 DLL,不然没法断点...

2024-02-19 12:12:00 669

原创 Detours 的使用

Detours 是一个用于在 ARM, ARM64, X86, X64 和 IA64 机器上拦截二进制函数的库。 Detours 最常用来拦截应用程序中的 win32 api 调用,比如添加调试工具。 拦截代码在运行时动态应用。Detours 将目标函数的前几个指令替换为无条件跳转到用户提供的 detour 函数它与WriteProcessMemory 有所不同区别:WritePro...

2024-02-19 11:15:00 424

原创 如何编写一个 PowerShell 脚本

PowerShell 脚本的后缀是 .ps1前提:ps1 脚本可以帮忙我们快速修改文件内容,还不需要调用文件的底层 api,方便快捷在编写 CMakeLists 时发现,项目不能够很好的使用 vcpkg tool chain,哪怕是在命令行中指定 vcpkg.cmake如果只是简单的项目,vcpkg tool chain 可以正常工作,但是在稍微复杂一些的项目中,比如依赖的 vcpkg ...

2024-01-16 18:33:00 816

原创 2023 年终小结

2023 结束了,写几句想说的话,也算是对这一年成长的小结1. 千里之行,始于足下,再难的任务也可以解析成很多小的需求,再逐个完成2. 保持积极向上的心态,遇事不着急,先分析再吸取他人的意见,最终给出中肯的解决方法3. 拥抱新的变化,要多读书多回顾,多记录学习到的知识,光靠脑子记不太行4. 尊重每一个人,你尊重他,他也会尊重你5. 家人的身体健康是最大的财富最后写些对自己的说的话,...

2024-01-02 15:34:00 378

原创 调试工具汇总

1.dependency walker用于查看 dll 之间的依赖关系2.EXE Explorer查看 exe 或者 dll 的 PE 信息可以查看时间戳,看编译时间是否正确3. hash.exe查看文件的 md5 是否一致可以用来检查文件是否完整4.clumsy 0.2clumsy 能在 Windows 平台下人工造成不稳定的网络状况,方便你调试应用程序在极端网络状况...

2023-12-25 12:02:00 428

原创 如何设置 vcpkg 依赖特定编译器

最近项目要部署到 gitlab-ci 上,所以远程机器上也要安装好编译环境在相关的环境安装完后,发现编译项目时提示找不到三方库的符号文件看到这个错误的第一反应就是依赖库的版本不对,因为远程机器上不仅安装了 vs2019,还安装了 vs2022这个可能会导致 vcpkg 编译时选择了 vs2022 的 MSVC,但是我们在 cmake 时选择的是 vs2019这样就导致了 jsoncpp...

2023-12-18 11:20:00 860

原创 C++ 快速加载 Dll 里的 API

最近项目里要重新编写程序加载器,也就是编译出一个可执行文件,在 Windows 上是 .exe为什么要程序加载器?个人理解是,可执行文件大小最好是越小越好,功能都可以由 dll 文件执行而程序加载器里最重要的是两个 win32 函数,分别是 LoadLibrary 和 GetProcAddress前者是加载 dll 并返回 instance 句柄,后者是从 instance 里提取所需的...

2023-12-14 11:46:00 444

原创 Windows 项目的 CMakeLists 编写

前言:项目一直是以 .sln 解决方案打开和处理的,上传到 github 也是需要将 sln 文件包括到项目里,不太优雅(虽然方便),毕竟现在开源项目基本都是使用 CMake 做跨平台编译因为项目是以 Windows 编译为主,就只写了 CMakeLists 中的 Windows 的部分,后续如果要跨平台的话,可以在此基础上拓展。写这篇文章的主要目的是积累和分享学习经验,在寻找相关 vs ...

2023-12-05 11:05:00 362

原创 windows 上 cmake 添加 vcpkg 选项

使用 cmake 编写相关的工程时,工程有时会使用 vcpkg 添加的第三方库,比如 zip 库查看一些案例后,我发现有些回答不太准确,遂记录下现在,我们需要在工程中使用zip_open 函数执行压缩命令,这个函数是 zip.h 里的,所以我们先要添加 zip 库打开 cmd,输入 vcpkg install libzip:x86-windows-static如果提示找不到 vcpk...

2023-11-30 17:43:00 254

原创 gitlab/github 设置 SSH

最近项目要部署到另一台机器上,故要重新 git clone 一下一开始只是简单的设置 config 里的 user.name 和 user.email,以为就可以 clone(邮箱账户拥有项目的权限)设置 config user.name 和 email 的方法git config --global user.name "Your Username"git config --glo...

2023-11-23 11:10:00 95

原创 dllimport 和 dllexport

Dll 在需要暴露接口的头文件里添加 dllexport 声明,比如,#define DllExport __declspec( dllexport )class DllExport C { int i; virtual int func( void ) { return 1; }};注意,禁止对可导出类的成员显式使用dllimport和dllexport...

2023-11-08 16:14:00 112

原创 vcpkg manifest 的使用

最近项目上要使用 CMakeLists 管理,由于 Windows 版本有依赖到 vcpkg 提供的库,所以需要使用 vcpkg manifest 来统一设置库的版本,方便后续维护推荐一个文章,介绍的可以说是非常全面了VCPKG 特性 - Versioning不过里面也有一些过时的特性,我在后面会补充一下为了防止上面文章的链接失效,故列出一些常用的命令这是一个完整的 vcpkg.j...

2023-10-13 19:38:00 263 1

原创 windows 上 ffmpeg 库的安装

真复杂啊安装 ffmpeg 库有两种途径,一种是自己下载源码再去编译,另一种是使用 vcpkg 自动安装一般情况下,第二种是最简单方便的,但是如果你需要使用 ffmpeg 的特定历史版本,那就有点困难了下面记录下我遇到的坑,借助这篇文章,我打算使用 vcpkg 切换到 ffmpeg 的历史提交并安装1. cmd 下切换到 vcpkg.exe 的安装目录下,确保该目录下有 .git 文件...

2023-09-19 15:46:00 335

原创 MinGW 和 MSVC

在 Winodws 上编译通常会用到这两种工具链MinGW(Minimalist GNU for Windows) 通常用于跨平台开发,可以编译出在 Windows 系统上运行的 .exe 程序MSVC(Microsoft Visual C++) 是专属于 Windows 软件开发,不能跨平台它们有以下区别:编译器:MinGW 使用GNU编译器集合(GCC)的变体,它是一个开源的...

2023-09-15 14:53:00 2102

原创 使用 MSYS2 编译 exe 可执行程序

MSYS2 是一个在 Windows上 运行的软件环境,它提供了一种在 Windows 上使用 GNU 工具链的方式,包括 GCC 编译器和 GNU Make 构建系统。在 MSYS2 中,你可以使用静态库(.a 文件)来编译和链接 Windows 版本的软件,但是需要确保一些事项:正确的工具链:确保你使用的是适用于 Windows 的工具链,而不是针对 Linux 或其他操作系统的工具...

2023-09-14 14:56:00 499

原创 uint32_t 至 int64_t 转换

而 -1 在 uint32_t 中并不会保持为负值,它只能表示非负的整数值,所以 -1 会被解释为一个很大的正整数,具体取决于该类型的最大值(UINT32_MAX)int64_t 的取值范围是 -9223372036854775808 到 9223372036854775807,所以放下 UINT32_MAX 没有压力。在 uin32_t 中,-1 被表示为该类型的最大值减去它的绝对值再加 1,即 4294967295 - 1 + 1,结果为 4294967295。主要问题在这行代码上,

2023-08-31 18:25:48 1298

原创 将博客搬至CSDN

鉴于博客园目前存在的危机,保险起见,将自己的文章搬到 CSDN 上CSDN:https://blog.csdn.net/qq_39529180博客园:https://www.cnblogs.com/strive-sun/

2023-08-16 17:50:00 57

原创 ubuntu 23.04 无法联网

一些参考文章:解决ubuntu突然无法联网问题共享主机网络方法:https://www.server-world.info/en/note?os=Ubuntu_22.04&p=squid&f=2如何在 windows 和 ubuntu 直接拖动文件?Vmware虚拟机和宿主之间的复制文件设置虚拟机共享主机VPN连接更新:上面方法对我来说全部没...

2023-08-15 15:55:00 103

原创 关于 try... catch

在逛论坛看见一个有意思的帖子,有点意思,记录下关于"异常捕捉"(try catch)是否存在悖论?一些我觉得有用的回复,放到下面了,1. 当某些错误状况难以完全避免时,try-catch 可以用来控制错误扩散范围,防止整个程序崩溃。比如外部系统异常、网络中断等不可控因素。2. 对于业务逻辑复杂的情况,想要全面预测并避免所有错误是很困难的。try-catch 可以用来处理意料之外的异...

2023-08-11 15:31:00 60

原创 Google C++ 风格指南记录

最近在看谷歌的 C++ 风格指南发现了一些有意思的知识点,遂记录下1. 第六章第二小节介绍了右值引用只在定义移动构造函数与移动赋值操作时使用右值引用. 不要使用std::forward.定义:右值引用是一种只能绑定到临时对象的引用的一种, 其语法与传统的引用语法相似. 例如,voidf(string&&s); 声明了一个其参数是一个字符串的右值引用的函数.优...

2023-08-10 17:16:00 66

原创 std::shared_ptr 线程安全方面的思考

一直惦记着 std::shared_ptr 线程安全的问题,看了些文章后,又怕过段时间忘记了,遂记录下来std::shared_ptr 的线程安全问题主要有以下两种:引用计数的加减操作是否线程安全std::shared_ptr 修改指向时是否线程安全第一个问题的答案: 是线程安全的,因为是原子操作注意:引用计数这一变量的存储,是在堆上的,多个 std::shared_ptr 的对...

2023-08-04 18:41:00 233

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除