目錄
- 一.前言
- 二.生成靜態鏈接庫
- 三.使用靜態鏈接庫
一.前言
這篇文章簡單討論一下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還是可以正常執行,這是靜態鏈接庫的特性,也就是所謂的靜態鏈接。
歡迎討論,歡迎指正,歡迎轉載。
?