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

相关推荐
2301_803554521 小时前
c++中类的前置声明
java·开发语言·c++
LyaJpunov9 天前
深入理解 C++ volatile 与 atomic:五大用法解析 + 六大高频考点
c++·面试·volatile·atomic
小灰灰搞电子9 天前
Qt PyQt与PySide技术-C++库的Python绑定
c++·qt·pyqt
时空自由民.9 天前
C++ 不同线程之间传值
开发语言·c++·算法
Ray_19979 天前
C++二级指针的用法指向指针的指针(多级间接寻址)
开发语言·jvm·c++
双叶8369 天前
(C语言)Map数组的实现(数据结构)(链表)(指针)
c语言·数据结构·c++·算法·链表·哈希算法
Jay_5159 天前
C++ STL 模板详解:由浅入深掌握标准模板库
c++·学习·stl
Cyrus_柯9 天前
C++(面向对象编程——继承)
开发语言·c++·算法·面向对象
Echo``9 天前
12.OpenCV—基础入门
开发语言·c++·人工智能·qt·opencv·计算机视觉
十秒耿直拆包选手10 天前
C++:动态库相关文件
c++