当前位置: 首页 > news >正文

[minilibc] 库文件的调用放置

minilibc: 一个用于学习目的的 C 标准库的简化实现 (claude-3.7-sonnet Cursor IDE),展示了 C 库的核心组件,包括程序的启动和结束、基本的内存管理、字符串操作以及简化的 I/O 功能。

该库实现了 _start 函数以设置环境,并提供了简单的 malloc, free, strlenstrcpy。构建该库只需运行 make 命令,生成静态库和测试程序。

用AI然后打脸...修了好多 bug

例如

  • Inline assembly 忘记 %%

  • _start 的 rsp 已经被改过了
  • mmap 的参数顺序错了
  • munmap 忘记处理头上的 8 字节 size

    • 也只是让 test.c 能正常运行了
    • 不知道还有没有更多的问题

代码:谨慎使用 AIGC


运行

注意

我们可以发现,cursor 将要调用的外部库的头文件放到项目的 include 目录下,主要是为了解决 代码组织、编译依赖、路径管理 三个核心问题。以下是具体原因和实现逻辑:


一、核心原因

  • 统一管理头文件路径
    • 编译器默认会从系统路径(如 /usr/include)和项目 include 目录查找头文件。
    • 将外部库头文件集中到 include 下,可避免手动写冗长的路径(如 #include "../../libs/foo.h")。
  • 隔离系统依赖
    • 系统全局安装的库可能版本不匹配(如系统 OpenSSL 是 1.1,项目需要 3.0)。
    • 项目内 include 可存放特定版本的库头文件,确保编译时使用正确版本。
  • 便于版本控制
    • 若库文件与项目代码一起提交到 Git,放在 include 下能明确管理依赖关系。
    • 示例:
project/
├── include/
│   └── mylib/      # 第三方库头文件
│       ├── utils.h
│       └── config.h
└── src/└── main.c     # 使用 #include <mylib/utils.h>

二、实现方式对比

方式

适用场景

优缺点

系统路径安装

全局通用库(如 libc、OpenSSL)

✅ 无需修改项目结构
❌ 版本冲突风险高

项目内 include

私有库或需定制版本的库

✅ 版本可控
❌ 增加项目体积

构建工具管理

CMake/FetchContent/vcpkg

✅ 自动下载依赖
❌ 需配置构建系统


三、实际编译流程示例(以 GCC 为例)

  1. 未使用 include 目录(路径混乱):
gcc -I../libs/mylib -I../../deps/include -o main src/main.c
  1. 使用 include 目录(路径清晰):
gcc -Iinclude -o main src/main.c
    • 编译器自动在 include 下查找所有头文件。

四、何时需要放入 include?

  1. 需要修改库代码:调试或定制第三方库时,直接修改 include 下的文件。
  2. 跨平台兼容:将不同平台的头文件统一放在 include 的子目录中(如 include/linux/, include/windows/)。
  3. 避免命名冲突:通过子目录隔离同名头文件(如 include/lib1/foo.hinclude/lib2/foo.h)。

五、替代方案建议

如果不想污染项目结构,可通过以下方式替代:

  1. 符号链接
ln -s /path/to/external_lib/include project/include/external_lib
  1. CMake 的 target_include_directories
target_include_directories(myapp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../external_lib/include)

相关文章:

  • 一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN
  • 国联股份卫多多与北京慧闻科技(集团)签署战略合作协议
  • 自动驾驶领域专业词汇(专业术语)整理
  • day9 python 热力图与子图的绘制
  • 一键叠图工具
  • 免费的多数据库连接管理工具-支持达梦、Oracle、MySQL、PostgreSQL数据库!
  • Crawl4AI,智能体网络自动采集利器
  • 爬虫过程中如何确保数据准确性
  • vue相关知识补充
  • 第四章:Messaging and Memory
  • Python 如何操作数据库,让你使用 DeepSeek 开发数据库应用更加快 (Orm Bee)
  • 相机-IMU联合标定:相机标定
  • 大模型(LLMs)加速篇
  • Improving Deep Learning For Airbnb Search
  • 9.学习笔记-springboot(P90-P104)
  • OSCP - Proving Grounds - Wpwn
  • 同步时钟与异步时钟
  • Python 实现的运筹优化系统数学建模详解(动态规划模型)
  • qemu(3) -- qemu-user使用
  • 【Machine Learning Q and AI 读书笔记】- 01 嵌入、潜空间和表征
  • 演员刘美含二手集市被曝售假,本人道歉
  • 人民日报评论员:汇聚起工人阶级和广大劳动群众的磅礴力量
  • 新经济与法|如何治理网购刷单与控评?数据合规管理是关键
  • 纪录电影《中国有戏:天幕计划》启动,有望太空播放
  • 上海“生育友好岗”已让4000余人受益,今年将推产假社保补贴政策
  • 高璞任中国第一汽车集团有限公司党委常委、副总经理