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

linux下C++生成并使用静态库和静态库

为了保证以下程序能正常编译,请先按照提供的操作搭建好目录结构:创建一个Demo文件夹,文件夹下创建一个Fun文件夹,创建好后进入Fun文件目录下,创建math.cpp和math.h文件。

编写math.h和math.cpp内容。

// math.h #include <iostream> using namespace std; // 定义add函数 int add(int a, int b);
// math.cpp #include "math.h" // add函数实现 int add(int a, int b) { return (a + b); }

一、静态库生成和使用

在Fun目录下,使用g++命令将上面准备好的math.cpp编译成.a文件,输入命令后会在当前目录下生成一个libmath.a的文件,这个文件就是静态库。

g++ -c -o libmath.a math.cpp # -c 表示只编译不链接 # 静态库命名规范:lib开头,.a后缀名

确定生成静态库后,回到上一级目录下,即Demo目录下,创建demo.cpp。

# demo.cpp #include "Fun/math.h" int main() { int a = 44; int b = 66; std::cout << add(a, b) << std::endl; return 0; }

使用生成的libmath.a文件来编译demo.cpp文件。

# 方法一,直接指定.a文件, g++ -o demo demo.cpp /home/long/c++/lib_so/Demo/Fun/libmath.a # 方法二,使用-L参数,这种是规范用法,会自动找到.a文件,建议用这种方式 # 注意最后一级目录不要加/,否则会找不到库 g++ -o demo demo.cpp -L/home/long/c++/lib_so/Demo/Fun -lmath

方法一运行结果

方法二运行结果

二、动态库生成和使用

注意:所有生成动态库的程序使用都是静态库中的源程序,不做任何修改。

进入Fun目录下,使用g++命令动态库,也就是常见的.so文件,运行命令后就会生成一个libmath.so的文件。

g++ -fPIC -shared -o libmath.so math.cpp

生成.so文件后,回到上一级目录Demo,在当前目录下通过libmath.so文件编译demo.cpp文件。

# 方法一,直接指定.so文件 g++ -o demo demo.cpp /home/long/c++/lib_so/Demo/Fun/libmath.so # 方法二,规范用法 g++ -o demo demo.cpp -L/home/long/c++/lib_so/Demo/Fun -lmath # 也可以使用相对路径 g++ -o demo demo.cpp -L./Fun -lmath

在使用方法二时,需要将.so文件加入到环境变量中,这样能确保生成的程序找到对应的链接库。

# 使用动态库时不能直接用,需要将动态库加入环境变量LD_LIBRARY_PATH中 #查看环境变量 echo $LD_LIBRARY_PATH #加入环境变量 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/long/c++/lib_so/Demo/Fun

方法一的运行结果

方法二的运行结果

在教程中,静态库和动态库的规范用法是一样的,如果同时存在静态库和动态库时,程序会优先使用动态库。

http://www.jsqmd.com/news/1389974/

相关文章:

  • LangGraph状态管理核心:Reducer原理、类型与并发实战
  • 如何建设个人网站从0到1:普通人也能做出的高颜值独立门户
  • 解决管网压降空压机选型要点与专业型号解析
  • PhotoGIMP完整上手教程:3步让免费GIMP变身Photoshop界面,每年省下上千订阅费
  • 杰理之无法修改PA 控制IO问题处理【篇】
  • 游戏逆向工程实战:从数据解析到MOD开发的技术探索
  • go-env源码解析:从EnvSet到ChangeSet的设计哲学
  • 2026年美工外包公司/平面设计包月公司横向对比来了:从服务与交付来看哪家值得推荐? - 企业综合对比网
  • 与deepseek-flsah 网页版的对话,比geminni强太多了:4个问题,带你简单了解,接口与抽象类的区别,多态的概念
  • 零基础微信逆向工程实战:3步搞定微信ipa获取、砸壳与头文件导出
  • 数学建模竞赛问题二进阶攻略:从模型深化到论文写作全解析
  • 2024年深耕本地生活圈,地方门户网站建设方案如何打造城市流量新引擎
  • 南京英文网站建设:如何让中国制造在世界舞台发出真实声音?
  • 响沙湾膜结构的施工技术难点与工程质量管控
  • 2027长三角半导体展|2027上半年半导体展|国产替代浪潮下,合肥如何扛起长三角芯产业担当
  • 列生成算法:大规模优化问题的核心原理与工程实践
  • MathorCup数学建模竞赛:2026年赛题深度解析与高分攻关指南
  • 揭秘贵阳平台网站建设背后的真实逻辑与避坑指南,带你打造高转化企业官网
  • 2026年高尔夫打击垫源头厂,好用不贵你选对了吗
  • 彻底解决外部重定向风险:NelmioSecurityBundle安全跳转方案
  • 从键值存储到原生向量搜索,Amazon DynamoDB 的演进与价值
  • 对话即编程实战:基于Claude Code与状态机思想的高效开发指南
  • ElasticSearch Paramedic高级使用技巧:自定义刷新间隔与性能优化策略
  • TikTokDownloader使用教程:一个工具搞定抖音TikTok批量下载与数据采集
  • stb_image 深度解析:stbi_load 解码流水线、自定义流与内存集成
  • 上海国际空运出口:多航线承运方案与时效运价参考汇总 - 2027品牌AI展
  • 老PS2光驱罢工之后:Open PS2 Loader免盘游戏完整实战指南
  • 快手算法深度解析:从冷启动到流量池跃迁的实战指南
  • Windows系统文件uireng.dll丢失找不到问题解决
  • 当代码和设计文档“闹分手“,来一次设计一致性检视