新闻中心

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

2025-11-30
浏览次数:
返回列表
静态库在编译时嵌入可执行文件,生成程序独立但体积大;动态库运行时加载,节省内存但需系统存在库文件。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)。

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

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

GoEnhance GoEnhance

全能AI视频制作平台:通过GoEnhance AI让视频创作变得比以往任何时候都更简单。

GoEnhance 347 查看详情 GoEnhance
  • 编译生成位置无关的目标文件(加 -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++共享库的方法的详细内容,更多请关注其它相关文章!


# 网络编程  # 厦门思明区网站建设  # 网站自己推广方案ppt  # 网红seo直播  # 同江网站网络建设  # 怎么推广的游戏网站  # 台州高端网站建设哪家强  # 好医生网站建设总结文案  # 马鞍山外贸网站推广电话  # 青岛哪里有网站优化制作  # 找主播推广网站  # 编译程序  # 加载  # linux  # 可执行文件  # 有什么区别  # 第三方  # 头文件  # 微软  # 主程序  # 怎么做  # red  # 区别  # c++  # ai  # c语言 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  qq游戏网页版直接玩_qq游戏免下载快速入口  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  Lar*el DB::listen 事件中的查询执行时间单位解析  腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  python3时间如何用calendar输出?  微信网页版官方入口教程 微信网页版网页版快速登录步骤  vivo云服务网页版登录 怎么登录vivo云服务网页版  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  提升Kafka消费者健壮性:会话超时处理与消息处理语义  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图  如何在J*a中使用Locale处理多语言环境  Python Socket多播通信中指定源IP地址的实践指南  AO3网页版最新入口合集 Archive of Our Own在线访问指南  在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  内存疯狂猛猛涨价:主板销量直接腰斩!  我的世界官方游戏入口 我的世界官网平台直达链接  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  Go语言中对Map值调用带指针接收者方法:原理与最佳实践  构建轻量级网站内部消息系统:Formspree 集成指南  提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  抖音网页版快捷访问 抖音网页版网页版入口操作教程  Flexbox布局实践:实现粘性导航栏与底部固定页脚  Python实现多节点属性重叠度分析教程  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  不同用户不同价格! 索尼开启账户个性化定价测试  期待已久:小米17 Ultra、小米首款NAS本月登场  J*aScript异步迭代器_j*ascript异步遍历  聚水潭ERP登录页面入口 聚水潭ERP官网登录界面  html5 app怎么运行环境_配html5 app运行环境【教程】  58动漫网在线官方网 58动漫网正版动漫入口网址  2026春节假期时间安排 2026春节假日查询  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  C++如何比较两个字符串_C++ string compare函数与操作符对比  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程  Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  火锅吃太多会怎样 火锅吃太多会上火吗  抖音怎么赚钱_抖音创作者变现方法与途径指南  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  yandex入口引擎手机版 yandex安卓版下载入口  不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  字由网在线版登录地址 字由网网页版安全入口 

搜索