自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从 Qt 角度理解 ArkUI 的控件方法

和是 Init 组件的回调函数属性,使用@Param装饰器声明。这两个属性本质上是事件处理器,让 Init 组件能够通知父组件执行不同的页面跳转操作。通过回调函数的方式,实现了组件间的优雅通信和职责分离。

2025-09-03 11:34:00 1066

原创 Windows 上 cmakejs 配置 asan

5. 因为 node 运行 js 文件时,会默认延迟加载 node.exe,所以我们可以先将原始的 node.exe 备份,并将已注入 clang_rt.asan_dbg_dynamic-x86_64.dll 的 node.exe 命名为 node.exe,即替换为原始的 node.exe。挂载到 node.exe 中,node.exe 路径默认为系统环境变量中设置的 node.exe 路径。命令,并编译出 .node 文件,如果项目还依赖其他的 .node 文件,那相关项目的。在 /d: 后面指定。

2025-06-17 11:20:00 366

原创 napi_call_threadsafe_function 实现跨线程获取数据

触发 native 回调函数 => CallInJs 将 lambda 封装到 CallJsContext 并将 ctx 投递到 JS 线程的任务队列 => 在 JS 线程中,由 N-API 调用 CallJs,并传入有效的 napi_env,执行 lambda,最终调用 Js 的回调函数 => Js 的回调函数被触发,在 JS 中处理这些事件(音频的播放、暂停,UI 的显示场景等等)根据这些回调事件进行后续的动作(音频的播放、暂停,UI 的显示场景等等)的运行环境,需要它的原因是在。

2025-06-05 11:53:00 753

原创 分析 vscode 运行 node.js 闪退时的场景

小结:使用 vscode 调试底层代码不熟悉,导致花了不少时间来研究如何查看崩溃的堆栈信息,最终才找出问题所在。从这段代码可以看出,lock 还没被释放掉就调用 delete 了,从而出现了。再点击弹出的重试按钮,因为弹窗也提示了重试后查看错误信息,最终发现了崩溃的代码行。从弹出上后,触发了 abort 导致运行中断,结合控制台给出的信息。那么如何查看崩溃的堆栈信息呢,首先,通过。依附到 native 的线程上。我们猜测是否与锁有关。

2025-05-19 20:22:00 545

原创 运行 js 文件出现 Error: A dynamic link library (DLL) initialization routine failed 错误

这个问题其实是很奇怪的,在出现 DLL 初始化失败时,第一反应是第三方依赖库没添加成功,但是这次是没有依赖第三方库的,所以最终才排查到 asan 也算是“第三方库”后面在添加任何库,不管是系统库还是自己弄得三方库,都要确保在添加了。文件中添加内存泄漏检测的库(asan)时,只注释了。导致在运行时仍然会提示有 DLL 未初始化成功。这三行都注释掉,就不会出现问题了。参数后,同时添加库的名字或者路径。,没有将其他依赖的选项也注释掉;问题之后,又出现了新的问题。运行 js 文件时会出现。

2025-04-29 19:07:00 475

原创 dlsym 动态加载分析

第二:存储函数指针的地址可以用于间接寻址,这可以在后续方便修改函数的地址,如果直接赋值函数的地址则无法做到。返回的是 void*,一般在取函数指针时会保留函数的类型,如果直接存储函数的地址会丢失掉函数类型。

2025-04-27 18:25:00 244

原创 napi_create_async_work 和 napi_create_threadsafe_function 的使用场景分析

napi_create_threadsafe_function 与 napi_create_async_work 一般要结合使用,在 napi_create_threadsafe_function 创建一个线程安全函数时,再使用 napi_create_async_work 创建一个 work 来处理异步的耗时操作。napi_create_async_work:Node.js 不适合处理耗时的操作,而 napi_create_async_work 适合利用 C/C++ 层提供的多线程来处理耗时操作。

2025-04-25 12:22:00 963

原创 字节序与字符串

操作:在许多编程语言中,二进制数据可能是不可变的(如Python中的bytes类型)或可变的(如bytearray类型)。表示方式:通常是一个包含多个字符串元素的数组(或列表),其中每个元素都是一个独立的字符串,例如,["Hello", "World", "123"]。用途:用于表示文本数据,适合需要处理人类可读文本的场景,比如数据处理、文本解析、用户输入等。操作方式:对二进制数据的操作通常涉及到字节级的操作,而字符串数组处理的是较高层次的文本操作。操作:可以进行字符串连接、分割、替换、搜索等操作。

2025-03-19 15:59:00 221

原创 OpenGL 学习之路

教程链接:

2025-03-19 12:05:00 201

原创 C++ 前向声明案例

前向声明是C++中的一个重要概念,它允许我们在不包含完整类定义的情况下声明一个类的存在。告诉编译器某个类型的名称是一个类型声明指向该类型的指针或引用声明以该类型作为参数或返回值的函数// 这就是一个前向声明解决循环依赖问题减少编译时间降低代码耦合度在我们的项目中,通过使用前向声明,我们成功解决了BBPlayEngn和之间的循环依赖问题,使代码结构更加清晰和高效。

2025-03-07 17:22:00 458

原创 C++ 与 JavaScript 的回调处理机制

A: ClientContext 提供了一种在 C++ 和 JavaScript 之间传递上下文的机制,使得静态回调函数能够找到对应的对象实例。A: 通过 CallInJs 机制和线程安全函数确保回调在正确的线程上执行,并使用互斥锁和条件变量进行同步。本文档详细介绍了 Cronet.js 中 C++ 和 JavaScript 之间的回调处理机制。A: 在 C++ 层添加适当的错误处理,并确保异常不会跨越语言边界。Q: 如何确保回调的线程安全?Q: 如何处理回调中的异常?回调函数的生命周期管理。

2025-02-28 18:31:00 716

原创 Windows 上编译 mebedtls 的鸿蒙库

mebedtls 地址:https://github.com/Mbed-TLS/mbedtls准备工作:clone mebedtls 仓库到本地(tag: mbedtls-2.26.0)鸿蒙工具链(SDK version: v5.0.5)编译文件修改:对 CMakeLists.txt 进行修改,主要是关闭了以下几个选项ENABLE_PROGRAMSMBEDTLS_FATAL_...

2025-02-21 11:17:00 743

原创 Windows 下搭建 googletest 测试框架(C/C++)

引用该篇文章:https://www.cnblogs.com/augustine0654/p/17156412.html实际复现时发现了一些问题,故记录下:1. 使用 gcc 编译 exe 时,mian.c 文件位置是在 calculate 里命令: gcc ./src/calculate/main.c ./src/calculate/add.c -I ./src/calcula...

2025-02-08 15:17:00 658

原创 process.dlopen 错误处理

前提:使用 cmake-js 编译 native 的 node 包,在使用 node test.js 运行 js 文件时会报错node:internal/modules/cjs/loader:1340 return process.dlopen(module, path.toNamespacedPath(filename)); ^Error: The...

2025-01-23 19:15:00 557

原创 博客搭建技术方案

博客类型:静态博客,易于部署到三方服务器上,占用资源少,不易被黑框架类型:hugo(基于 Go,熟悉 C++ 比较容易上手 Go)博客内容:自定义主题,排版整齐,文章归纳,后续考虑加上评论插件编译工具:cursor代码托管:github辅助工具:将本地文档自动上传到 git 或者三方服务器托管服务器:cloudflare pages相关:类似于 hexo,hugo,atro 这...

2025-01-07 14:28:00 383

原创 git rest --hard

git push 时如果发现带有以前的 commit,且 git pull 和 rebase 都尝试过也无效可以使用 git reset --hard origin/master 来定位到最新的 commit,并重新提交变动的代码git reset --hard origin/master...

2025-01-02 17:27:00 380

原创 2024年的年终小结

又一年过去了,加上十二月份也没写一篇技术分享,故就用一个年终小结来结束这一年吧翻了下工作的聊天记录上半年:1. 主要是维护和开发当前的项目,以及解决各种疑难杂症,学习了不少知识,虽然现在也忘记了差不多,还好一些重要的都记录到博客了2. 我负责的项目优先级不高,所以迭代周期比较慢,今年才更新了四个版本。。。所以就上手学习了公司的播放器项目,播放器项目比较复杂,啃起来尤其费劲,故先学习了部分...

2024-12-31 18:40:00 497

原创 使用 vscode 调试 nodejs 代码

继前一篇:使用 cmake.js 在 Windows 上编译 js 代码我们已经能在 vscode 上成功的编译出 js 代码,那我们该如何断点调试 js 代码以及 js 引用的 C 库源码呢首先要先以 Debug 模式编译 js 代码cmake-js cleancmake-js compile -D找到 debug 生成的 pdb 文件,这个很重要,关乎到能否 debug 到 ...

2024-11-21 16:08:00 801

原创 Go 项目的配置流程

电脑配置:Windows 10 编译工具:vscodeGo:https://go.dev/dl/ (选择 Windows 安装包)步骤:用 vscode 打开项目文件夹,输入 go env,查看环境配置PS D:\Project> go envset GO111MODULE=set GOARCH=amd64set GOBIN=set GOCACHE=C:\Users\App...

2024-11-20 19:18:00 594

原创 git 同步上游仓库到远端仓库

首先知道什么是本地仓库,远端仓库,上游仓库本地仓库:你从远端仓库克隆到本地 PC 上的仓库远端仓库:从上游仓库 fork 过来的仓库,可以理解为自己的仓库上游仓库:公司的仓库,所有权不在于你当远端仓库慢于上游仓库时,如何同步上游仓库到远端仓库呢?git remote add upstream 上游仓库名称.git# 查看分支git remote -v# 从源分支拉取最新代码...

2024-11-13 15:36:00 601 1

原创 github 上将 stable 合并到 master 分支步骤

本地仓库分支:origin远端仓库分支:upstream切到非 master 分支上,比如 dev# 本地操作git branch -D mastergit fetch upstream master::mastergit checkout master# 这步是拉取远端 stable 到 master 上,可能会出错误# fatal: Not possible to fast...

2024-10-11 12:25:00 588

原创 使用 cmake.js 在 Windows 上调试 js 代码

前提:因要给鸿蒙手机提供打包好的 C++ 库,鸿蒙系统的应用层是 js 写的,底层是 C++ 写的,故为提高鸿蒙开发效率,需要将其他端的 C++ 库通过 napi 打包成 能 node.js 下运行的动态库但是平时多用 Windows 开发,所以要在 Windows 本地调试 js 代码,查看接口是否正常,如果正常就可以通过鸿蒙工具链打包成 arm64 的动态库了而 Windows 是 x8...

2024-09-26 20:25:00 886

原创 git 清除二进制文件的 changes 状态

问题:某个分支上修改了二进制文件,导致 changes 一直存在,切换到主分支也仍然存在,点击 Discard 也没用使用 git reset --hard 还原到初始状态,也不行,不过输出结果会给出错误信息Encountered 7 file(s) that should have been pointers, but weren't:解决方法:根据这个线索,搜索了相关案例(其...

2024-09-26 19:03:00 782

原创 MINGW 安装 Clang

MINGW 中使用 clang 突然显示命令找不到,重装了好几遍 clang 还是不行,最后使用下面的命令解决了pacman -S make python mingw-w64-x86_64-cmake mingw-w64-x86_64-clang mingw-w64-x86_64-ccache mingw-w64-x86_64-libuv mingw-w64-x86_64-gmp git u...

2024-09-26 16:51:00 346

原创 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 380

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

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

2024-09-20 19:06:00 539

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

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

2024-08-27 16:11:00 428

原创 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 602

原创 编译 wolfssl 库

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

2024-08-20 17:54:00 861

原创 编译 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 413

原创 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 516

原创 近期在看

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

2024-07-30 16:24:00 428

原创 Mac 命令行记录

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

2024-07-30 14:31:00 515

原创 FFmpeg 中 avcodec_parameters_copy 的含义

函数在重打包过程中非常重要,它确保了输入流的编解码参数被准确复制到输出流,使得输出文件能够正确识别并处理每个流的数据。这不仅简化了代码流程,还避免了重新编码的复杂性和潜在错误,确保输出文件与输入文件在流格式上保持一致。

2024-06-14 18:37:00 424

原创 FFmpeg 重打包

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

2024-06-14 12:24:00 844

原创 HLS、HTTP+FLV、DASH

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

2024-05-31 15:16:00 1146

原创 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 444

原创 git push

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

2024-05-22 19:42:00 443

原创 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 581

原创 深入理解 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 665

空空如也

空空如也

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

TA关注的人

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