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

一文说清:Linux下C++静态库的封装和调用

一 引言

《一文说清:windows下C++静态库的封装和调用》中说了:
静态库允许开发者在多个项目中复用代码,减少重复劳动,并增强程序的可维护性。并讲述了windows环境下创建、封装以及调用C++静态库的过程。

本文则描述了,如何在Linux环境下创建、封装以及调用C++静态库的过程,并附上源代码

编译环境:RedHat

二 静态库的封装

1 编写头文件和源文件

包括TestLib.h和TestLib.cpp。

TestLib.h文件如下:


#ifndef TEST_LIB_H
#define TEST_LIB_Hclass TestLib
{
public:TestLib(void);~TestLib(void);void show();private:int x;int y;
};#endif

TestLib.cpp文件内容如下:

#include "TestLib.h"#include <iostream>
using namespace std;TestLib::TestLib(void)
{x = 0;y = 0;
}TestLib::~TestLib(void)
{
}void TestLib::show()
{cout << "x: " << x << endl;cout << "y: " << y << endl;
}

2 编译成目标文件

命令如下:

g++ -o TestLib.o –c TestLib.cpp

此时,目录下多了一个TestLib.o文件。

3 编译成静态库

命令如下:

ar –rc lib.a TestLib.o

其中lib.a就是期望生成的静态库文件。

三 静态库的调用

1 编写测试代码

文件参考TestCallLib.cpp。

#include "TestLib.h"int main()
{TestLib testLib;testLib.show();return 0;
}

3 拷贝静态库和头文件

头文件为TestLib.h。
TestLib.h如下:

#ifndef TEST_LIB_H
#define TEST_LIB_Hclass TestLib
{
public:TestLib(void);~TestLib(void);void show();private:int x;int y;
};#endif

静态库文件为上述生成的lib.a。

3 连同库一起编译

命令为:

g++ -o test TestCallLib.cpp ./lib.a

test表示要生成的可执行文件。

TestCallLib.cpp是调用静态库的主程序。

./lib.a是当前目录下的静态库文件。

编译后得到test可执行程序。

4 运行可执行程序

命令如下:

./test
x: 0
y: 0

可以看到运行结果正确。

四 小结

本文主要讲了如下内容:

  • 封装静态库并生成静态库。
  • 创建测试调用代码。

源码及工程,已经上传资源,感兴趣的可以下载:
Linux环境下,关于C++静态库的封装和调用代码

http://www.lryc.cn/news/486877.html

相关文章:

  • 【Java 学习】数据类型、变量、运算符、条件控制语句
  • 【软考】系统架构设计师-数据库设计基础
  • 【Jmeter相关】
  • 拍立淘按图搜索API接口系列,返回示例图参考
  • OSG开发笔记(三十二):深入理解相机视口、制作支持与主视图同步变换旋转的相机HUD
  • 2024RISC-V中国峰会 演讲幻灯片和视频回放均已公开
  • 河道无人机雷达测流监测系统由哪几部分组成?
  • 28.<Spring博客系统⑤(部署的整个过程(CentOS))>
  • OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!
  • 香港站群服务器有助于提升网站在搜索引擎中的排名
  • YOLOX:使用自己数据集训练模型及改进--1.YOLOX环境搭建及运行
  • PyTorch使用教程-深度学习框架
  • TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞
  • “乐鑫组件注册表”简介
  • 凹凸/高度贴图、法线贴图、视差贴图、置换贴图异同
  • ZSTD 内存泄漏问题
  • c# npoi操作excel
  • 十二:HTTP错误响应码:理解与应对
  • Rust学习(六):函数式编程
  • 使用 Vue 和 Create-Vue 构建工程化前端项目
  • opencv图片明暗度判断方法
  • QT6学习第三天
  • 计算机网络-MSTP基础实验一(单域多实例)
  • React合成事件及其核心思想详解
  • Datawhale模型减肥秘籍Tasking之模型量化
  • 在云服务器搭建 Docker
  • Redis 的代理类注入失败,连不上 redis
  • 版本控制【Git Bash】【Gitee】
  • Neo4j Desktop 和 Neo4j Community Edition 区别
  • 使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法