目录
- 一.前言
- 二.生成静态链接库
- 三.使用静态链接库
一.前言
这篇文章简单讨论一下Linux下如何使用gcc/g++生成和使用C++静态链接库(.a文件)。
二.生成静态链接库
先看下目录结构
然后看下代码
//demo.h
#ifndef DEMO_H
#define DEMO_H
#include<string>
class Demo
{
public:
Demo(void) = default;
~Demo(void) noexcept = default;
void Print(const std::string& msg);
};
#endif // !DEMO_H
//demo.cpp
#include"demo.h"
#include<iostream>
void Demo::Print(const std::string& msg)
{
std::cout << "msg:" << msg << std::endl;
}
很简单的代码,就是提供一个打印字符串的接口。
然后我们使用demo.h和demo.cpp来生成静态链接库。
先执行命令g++ -c demo.cpp -o demo.o
生成demo.o,然后执行命令ar -cr libdemo.a demo.o
生成静态链接库libdemo.a,注意静态链接库必须要包含lib前缀,另外我们知道Linux下静态链接库的后缀是.a。
我们可以看到已经生成了静态链接库libdemo.a。
三.使用静态链接库
我们看一下怎么使用静态链接库,新建main.cpp来使用静态链接库。
先看下目录结构
然后看下代码
//main.cpp
#include<string>
#include"demo.h"
int main(int argc, char* argv[])
{
Demo demo;
std::string strMsg("main msg");
demo.Print(strMsg);
return 0;
}
其实就是很简单的代码。
然后执行命令g++ -o main main.cpp -L. -ldemo
使用main.cpp和libdemo.a生成可执行文件main。其中-L.指定要链接的库所在位置是当前目录,-ldemo指定要链接的库是libdemo.a。
我们可以看到已经生成了可执行文件main,并且可以正常执行,而且这个时候如果删除了静态链接库libdemo.a,main还是可以正常执行,这是静态链接库的特性,也就是所谓的静态链接。
欢迎讨论,欢迎指正,欢迎转载。