首页 > 后端开发 > C++ > 正文

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

裘德小鎮的故事
发布: 2025-11-30 15:24:07
原创
291人浏览过
静态库在编译时嵌入可执行文件,生成程序独立但体积大;动态库运行时加载,节省内存但需系统存在库文件。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)。

立即学习C++免费学习笔记(深入)”;

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

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

Rose.ai
Rose.ai

一个云数据平台,帮助用户发现、可视化数据

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

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号