c++创建并使用静态库(.lib)

静态库(Static library)通常以 .lib 后缀结尾,是一种在编译时与程序静态链接的库。它包含了一组已经编译好的目标文件(Object files),这些目标文件中包含了函数、类和其他程序实体的定义和实现。

需要注意的是,静态库中包含了所有需要的代码,因此在编译时会将静态库的代码全部复制到生成的可执行文件中,因此最终的可执行文件会比较大。与动态链接库(Dynamic library)相比,它在编译时会将库的代码与程序代码合并,而不是在运行时动态加载。

静态库的使用方式相对简单,但也有一些限制,例如无法在运行时替换库的版本,以及不能共享库的实例等

静态库的创建及使用步骤

  • 编译静态库 :首先,你需要编译你的代码并生成静态库文件。这通常需要使用编译器(如 GCC、Clang 或 Visual C++)以及相应的构建工具(如 Make、CMake 等)。编译后,你会得到一个 .lib 文件。

  • 使用静态库 :接下来,在你的代码中使用这个静态库。你需要在你的源文件中包含该静态库的头文件(通常是 .h 文件),并且链接静态库。对于大多数编译器,你需要告诉编译器去哪里找到这个静态库,以及需要链接哪个静态库文件。

本例工具:vs2015

1、创建空解决方案(可省略)

这一步可以不要,主要是关联静态库解决方案是测试客户端解决方案

1、新建空白解决方案

2、创建好的目录结构如下

2、创建编译静态库

1、添加静态库项目

2、创建win32项目

  • 下一步
  • 勾选静态库(S),取消勾选预编译头(P)
  • 生成的静态库项目解决方案目录

3、添加头文件

c++ 复制代码
#pragma once

namespace MyStaticLib
{
    class HelloTest
    {
    public:
        static void printHello();
    };
}

4、添加cpp文件

c++ 复制代码
#include "MyStaticLib.h"
#include <iostream>

namespace MyStaticLib
{
    void HelloTest::printHello()
    {
        std::cout << "hello MyStaticLib.lib" << std::endl;
        std::cin.get();
    }
}

5、解决方案配置

我们设置为Release和x86

6、F7编译

7、生成lib库文件

3、 创建客户端使用静态库

1、添加客户端测试项目

2、创建win32控制台应用程序

  • 生成的解决方案目录

3、导入静态库及头文件

我们想要使用静态库的内容,需要导入静态库的头文件

1、创建lib目录

我们可以在客户端项目client中创建一个lib目录用于存放静态库相关资源,将staticLib项目的静态库的头文件,及编译生成的lib库文件拷贝到客户端的lib目录

2、配置静态库后期生成事件

也可以配置静态库项目的属性,自动完成拷贝过程

vs 复制代码
xcopy /y /d "..\$(IntDir)staticLib.lib" "..\client\lib"
xcopy /y /d "MyStaticLib.h" "..\client\lib"

配置这个属性后,我们每次编译生成静态库项目,就会自动拷贝静态库.lib和头文件到客户端的lib目录。

如,静态库项目编译生成成功后,client客户端的lib目录自动拷贝了静态库和头文件

4、使用静态库

1、添加静态库头文件
2、编写客户端测试程序
c++ 复制代码
// client.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
// 静态库头文件
#include "lib\MyStaticLib.h"

// 指定静态库位置
// 将库搜索记录置于对象文件中
// (可以不用在属性中配置,当然不写这行代码,在属性中配置包含目录及库也可以)
#pragma comment(lib, "lib/staticLib.lib")

int main()
{
    // 调用静态库方法
    MyStaticLib::HelloTest::printHello();
    return 0;
}
3、编译运行客户端程序

将client设置为启动项目

开始运行(或按F5也可以)

结果打印

4、官网教程

演练:创建并使用静态库

5、#pragma comment

#pragma comment

相关推荐
家有狸花2 小时前
VSCODE驯服日记(三):配置C++环境
c++·ide·vscode
dengqingrui1232 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝2 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O3 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
小飞猪Jay5 小时前
C++面试速通宝典——13
jvm·c++·面试
rjszcb6 小时前
一文说完c++全部基础知识,IO流(二)
c++
小字节,大梦想7 小时前
【C++】二叉搜索树
数据结构·c++
吾名招财7 小时前
yolov5-7.0模型DNN加载函数及参数详解(重要)
c++·人工智能·yolo·dnn
我是哈哈hh7 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
憧憬成为原神糕手7 小时前
c++_ 多态
开发语言·c++