C++静态库和动态库怎么做_在Linux下编译和使用C++共享库的方法


静态库在编译时嵌入可执行文件,生成程序独立但体积大;动态库运行时加载,节省内存但需系统存在库文件。1. 编写math_utils.cpp和头文件;2. 静态库用g++ -c生成.o文件,ar rcs打包为.a文件;3. 动态库需加-fPIC编译,g++ -shared生成.so文件;4. 使用时均需-L指定路径,-l链接库名;5. 运行动态库程序前设置LD_LIBRARY_PATH或配置系统库路径。静态库适用于发布独立应用,动态库便于模块共享与更新。C++导出给C调用时需加extern "C"避免符号修饰问题。

c++静态库和动态库怎么做_在linux下编译和使用c++共享库的方法

在Linux下使用C++编写和使用静态库与动态库(共享库)是开发中的常见需求。它们都能将代码模块化,便于复用和维护,但工作方式不同。下面介绍如何创建和使用这两种库。

静态库的创建与使用

静态库在编译时被完整地复制到可执行文件中,生成的程序不依赖外部库文件,但体积较大。

步骤如下:
  • 编写源文件,例如 math_utils.cpp
// math_utils.cpp
double add(double a, double b) {
    return a + b;
}

对应头文件 math_utils.h

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
double add(double a, double b);
#endif
  • 编译为目标文件:
g++ -c math_utils.cpp -o math_utils.o
  • 打包成静态库:
ar rcs libmathutils.a math_utils.o
  • 使用静态库编译主程序:
g++ main.cpp -L. -lmathutils -o main

确保 main.cpp 包含头文件:#include "math_utils.h",并链接时指定库路径(-L.)和库名(-lmathutils,去掉前缀lib和后缀.a)。

动态库(共享库)的创建与使用

动态库在程序运行时加载,多个程序可共享同一份库文件,节省内存,但需保证库在目标系统上存在。

6pen Art 6pen Art

AI绘画生成

6pen Art 213 查看详情 6pen Art
  • 编译生成位置无关的目标文件(加 -fPIC):
g++ -fPIC -c math_utils.cpp -o math_utils.o
  • 创建共享库:
g++ -shared -o libmathutils.so math_utils.o
  • 使用共享库编译主程序:
g++ main.cpp -L. -lmathutils -o main
  • 运行程序前,需让系统能找到共享库。临时设置库路径:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main

也可将库复制到系统目录(如 /usr/local/lib),或配置 /etc/ld.so.conf.d/ 并运行 ldconfig

关键区别与建议

静态库适合发布独立程序,无需依赖外部文件;动态库适合多程序共用模块,更新库时只需替换.so文件,无需重新编译程序。

注意:C++共享库涉及符号修饰(name mangling),若供C语言调用,需在函数声明外加 extern "C" 防止名称混乱。

基本上就这些。编译、归档、链接三步走,区分好 -fPIC 和链接路径即可。

以上就是C++静态库和动态库怎么做_在Linux下编译和使用C++共享库的方法的详细内容,更多请关注其它相关文章!


# 如何判断  # 什么是商品页seo功能  # 平邑论坛推广员招聘网站  # 新手学建设网站  # 深州网站建设  # seo岁数  # 营销推广月薪一般多少钱  # 南通网站建设套餐报价  # 网站建设需要的内容  # 合肥网站建设手机  # 海南关键词排名厂家  # 操作系统  # 加载  # linux  # 网络编程  # 客户端  # 可执行文件  # 如何实现  # 头文件  # 主程序  # 怎么做  # red  # 区别  # c++  # ai  # c语言 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Python中对象引用与链表属性赋值的机制解析  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  t3出行如何使用微信支付  《友玩*》创建群聊方法  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  《七读免费小说》开通会员方法  折叠屏手机充不进电是什么问题? 特殊结构带来的维修难点  《咸鱼之王》新版孙坚技能解析  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  房产|直播|视频号怎么认证开通?|直播|需要什么资质?  《梦想世界:长风问剑录》药师一图流分享  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  iPhone12是否要更新ios16  《东方航空》添加乘机人方法  响应式设计中动态背景颜色条的实现指南  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  KFC邀请码怎么使用领额外优惠_KFC邀请码输入方式与额外优惠代码获取方法  汽水音乐网页端访问 汽水音乐官方网页直达  店铺如何做视频号推广?做视频号推广有用吗?  VS Code中的Tailwind CSS IntelliSense插件使用技巧  获取WooCommerce产品在后台编辑页面的分类ID  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  GBA模拟器手柄按键设置  OTT月报 | 2025年9月智能电视大数据报告  向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  快递优选如何查优选物流_快递优选专属物流渠道查询与配送时效  在VS Code中利用AI辅助进行代码迁移  谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  原子笔记app误删找回教程  如何使用 Optional 类型并满足 Pylint 的类型检查  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  Google Drive API服务器端访问指南:服务账户认证详解  search中maxlength属性用法解析  cad视图选项卡不见了怎么办_cad视图标签恢复显示方法  歌词怎么展示在|直播|间视频号?有什么注意事项?  PDF如何批量加注释_PDF多文件批注高亮操作教程  苹果SE如何开启单手模式_苹果SE单手操作功能  《飞猪旅行》购买汽车票方法  XPath动态元素定位:如何精准选择文本内容变化的元素  cad加载的线型看不见怎么办_cad线型不可见问题解决方法  谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问  ToDesk远程摄像头功能使用方法_ToDesk远程视频画面查看设置教程  《海豚家》注销账号方法  多多买菜门店端app订单查看方法  Python测试中模块导入路径解析的最佳实践 

 2025-11-30

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.