makefile 编译动态链接库使用(.so库文件)
动态链接库:不会把代码编译到二进制文件中,而是在运行时才去加载, 好处是程序可以和库文件分离,可以分别发版,然后库文件可以被多处共享
动态链接库
动态:动态加载
链接:二进制文件和库文件分离。
库 库文件 .so
新建一个文件TestSo
//
// Created by qiufh on 2024-01-21.
//
#ifndef UNTITLED3_TESTSO_H
#define UNTITLED3_TESTSO_H
class TestSo {
public:
void fun1();
virtual void fun2();
virtual void fun3() = 0;
};
//
// Created by qiufh on 2024-01-21.
//
#include "TestSo.h"
#include <iostream>
void TestSo::fun1() {
printf("fun1\n");
}
void TestSo::fun2() {
printf("fun2\n");
}
void TestSo::fun3() {
printf("fun3\n");
}
编译一下
main.cpp
#include <iostream>
#include "TestSo.h"
class Test:public TestSo{
public:
void fun2() {
printf("fun2\n");
}
void fun3() {
printf("fun3\n");
}
};
int main() {
Test test;
test.fun1();
test.fun2();
test.fun3();
std::cout << "Hello, World!" << std::endl;
return 0;
}
写好之后我们放到linux系统中验证
编译成动态库.so文件
新建一个test.cpp测试文件
#include <iostream>
#include "SoTest.h"
class Test:public SoTest{
public:
void fun2() {
printf("fun2\n");
}
void fun3() {
printf("fun3\n");
}
};
int main() {
Test test;
test.fun1();
test.fun2();
test.fun3();
return 0;
}
链接动态库文件,执行测试一下,没问题,输出打印信息。
将cpp文件与so文件链接并生成执行文件:先将so文件拷贝至/lib文件夹内:
否则将会出现下面的错误:
把这个动态库的编译流程写入makefile文件中
先clean一下
再make一下
然后要把so文件拷贝到/lib目录下,否则会报错
成功