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

手动编译 JSONCPP 静态库​(CMake)

编译静态库

# 下载源码
git clone https://github.com/open-source-parsers/jsoncpp.git
cd jsoncpp
mkdir build && cd build
# 编译静态库
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF ..
make

编译完成后,静态库文件libjsoncpp.a会出现在build/lib/目录中。

参数含义

  • -DBUILD_STATIC_LIBS=ON
    • 作用​:显式指定构建静态库(.a.lib文件)。当设置为ON时,强制生成静态库;若为OFF则禁止生成静态库。
    • 技术细节​:静态库会将所有代码和数据直接编译到最终的可执行文件中,运行时无需依赖外部库文件,适用于需要独立部署或避免动态库依赖的场景。
  • -DBUILD_SHARED_LIBS=OFF
    • 作用​:显式禁止构建动态库(.so.dll文件)。当设置为OFF时,CMake 不会生成动态库;若为ON则默认生成动态库(除非被其他参数覆盖)。
    • 技术细节​:动态库在运行时通过链接加载,可减少内存占用并支持热更新,但需要确保运行时环境存在对应的库文件。关闭此选项后,项目仅生成静态库,或由BUILD_STATIC_LIBS单独控制。

组合使用场景

  • 静态库优先​:若同时设置-DBUILD_STATIC_LIBS=ON-DBUILD_SHARED_LIBS=OFF,CMake 仅生成静态库,这种配置常见于嵌入式系统或需要简化依赖分发的项目。
  • 默认行为​:若不指定这些参数,CMake 默认BUILD_SHARED_LIBS=ON,即优先生成动态库。

注意事项

  • ​冲突处理​:若两者均设为ON,CMake 可能同时生成静态库和动态库(取决于项目配置),但通常建议明确指定单一类型以避免潜在冲突。
  • 代码适配性​:某些项目可能通过宏(如MY_INFO_SHARED_LIBS)区分库类型,需确保头文件中的导出符号(如__declspec(dllexport))与构建类型匹配。
http://www.dtcms.com/a/329479.html

相关文章:

  • aliases 的意义和作用?
  • Mac M1探索AnythingLLM+SearXNG
  • nginx配置代理服务器
  • (50)QT 绘图里,视图 QGraphicsView、场景 QGraphicsScene 及图形项 QGraphicsRectItem 的举例
  • gunicorn + flask 处理高并发请求
  • Redis学习——Redis的十大类型String、List、Hash、Set、Zset
  • clickhouse集群的安装与部署
  • 相机按键功能解析
  • 国内时序数据库概览
  • vue导出功能
  • python学习DAY40打卡
  • RTCP详解
  • webrtc弱网-QualityRampUpExperimentHelper类源码分析与算法原理
  • Pytorch FSDP权重分片保存与合并
  • Node.js简介及安装
  • 人工到智能:塑料袋拆垛的自动化革命 —— 迁移科技的实践与创新
  • Node.js浏览器引擎+Python大脑的智能爬虫系统
  • Vue3从入门到精通: 3.5 Vue3与TypeScript集成深度解析
  • 热门手机机型重启速度对比
  • PCB题目基础练习2
  • 从“字”到“画”:基于Elasticsearch Serverless 的多模态商品搜索实践
  • aave v3 存款利息的计算方式
  • 《红黑树的原理与C++实现:详解平衡艺术的高效构建与操作》
  • 无人设备遥控器之编码技术篇
  • 【剑指offer】搜索算法
  • 力扣(跳跃游戏I/II)
  • c++26新功能—inplace_vector
  • 达梦数据库常见漏洞及处理方案
  • PostgreSQL——索引
  • TensorFlow实现回归分析详解