前言
之前有写过博客在windows 下创建静态库,最近刚好在学linux 接下来我们在linux 环境下创建静态库和动态库进行调用
c++ 生成静态库和调用第三方静态库(Visual Studio2017 windows 环境下)
参考视频
准备
准备好三个文件
1.swap.h
#include <iostream>
void swap(int &a,int &b);
2.swap.cpp
#include <swap.h>
void swap(int &a,int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
3.main.cpp
#include <swap.h>
using namespace std;
int main(){
int a=10;
int b = 20;
std::cout<<a<<std::endl;
std::cout<<b<<std::endl;
swap(a,b);
std::cout<<a<<std::endl;
std::cout<<b<<std::endl;
return 0;
}
我的文件结构如下所示,可以使用如下命令先测试输出
g++ main.cpp src/swap.cpp -IInc
生成静态库
- 进入src 目录
cd ./src
- 汇编,生成swap.o文件
g++ swap.cpp -c -I../Inc
- 生成静态库libSwap.a
ar rs libSwap.a Swap.o
- 回到上一级
cd ..
- 静态链接,生成可执行文件:Staticmain
g++ main.cpp -lSwap -Lsrc -IInc -o staticmain
其中-lSwap 代表链接libSwap这个静态库,因为库都是以lib开头,省去了lib,但是如果前面加上lib就会报错,运行一下发现g++默认已经添加了lib
-Lsrc 代表文件在src 文件夹下
-IInc 代表头文件的路径在Inc 下
6.运行
./staticmain
生成动态库
1.进入src下
2.生成动态库libSwap.so
g++ swap.cpp -I../Inc -fPic -shared -o libSwap.so
3.回到上级目录
4.链接,生成可执行文件:dyna_main
g++ main.cpp -lSwap -Lsrc -IInc -o dyna_main
5.运行
./sharemain
这样运行就会报错,因为动态库是在执行的时候进行链接,所以要加上路径
LD_lIBRARY_PATH=src ./dyna_main