自旋锁
该篇博客参考了《多处理器编程的艺术》第七章——自旋锁与争用,相关代码可在 GitHub 仓库 中查看。
VScode 1.86 版本的 remote 要求 glibc 2.28 及以上,于是在各种旧版本服务器上就不支持了。
新版本刚发布就在 github 上的 issue 上讨论起来了,VScode 官方文档 中也说明了,从 VS Code 版本 1.86.1(2024 年 1 月)开始提高了远程服务器构建工具链的最低要求。VS Code 分发的预构建服务器与基于 glibc 2.28 或更高版本的 Linux 发行版兼容。
当然给服务器升级 glibc 是一个极其危险的操作,本人曾经就瞎捣鼓升级了 glibc,结果导致系统崩溃,不得已重装了系统。
我们可以利用 patchelf 手动指定动态库,避免了重新编译系统的 glibc。
前几天我想把一个本地仓库推送到 github 仓库中时提示:
1 | remote: error: Trace: 9222dcf96227a19766567c1da4183cfef7b9ec21689a2ee21f6c1c3b2f1fab7a |
发现在之前的 git 记录中有一个大文件(18T.trace 771.88MB),但是在最新的提交记录中,我已经将其删除了,却依然无法推送。
经过查询资料,找到了解决方法:
关于这个问题,网上可以找到很多解决方案,包括但不限于:
但是最后仍然报同样的错误。
因为之前在更换 libc 版本,手动编译安装了 glibc,最后搜到这个博客,得知是 curl 出了问题,是 libcurl 版本过低,libcurl 是 c/cpp 使用时的链接库,常用的 http get,post 请求,http,ftp 下载等都支持
curl 的功能实现是依赖 libcurl.so 这个动态链接库的,通常位于 /lib64 或者 /usr/lib64 中,4.x 版本的链接库地址为 libcurl.so.4
最后发现 libcurl 版本为 4.3.0,可能不支持 glibc-2.30 高版本的运行时,因此重新下载了高版本的 libcurl,具体操作见博客
Rust 异步编程
学计算机的人不能不会用命令行 GDB 进行调试,就像西方不能没有耶路撒冷~~
本篇文章介绍 C 语言中类似
#define
,#if
,#ifdef
等预处理指令以及宏的高级用法,最后整理出项目中一些常用的宏,例如打印调试信息等。
本篇文章将不会介绍简单的宏用法,例如#define ADD(a, b) ((a)+(b))
本篇文章大部分参考《C Primer Plus 第六版》第 16 章
本文用 Rust 语言实现一个简单的进度条功能,并介绍通过转义码在终端打印带颜色等格式的字符串。