Linux中C++编译、使用动态链接库
Linux中so为共享动态链接库。下面我们通过一个四则运算的实例来学习动态链接库。
首先是头文件:my_math.h
:
/**
* my_math.h
*/
// a + b
int Add(int a, int b);
// a - b
int Minus(int a, int b);
// a * b
int Multiply(int a, int b);
// a / b
float Division(int a, int b);
然后是四则运算的实现:
/**
* my_math.cpp
*/
#include "my_math.h"
// a + b
int Add(int a, int b) {
return a + b;
}
// a - b
int Minus(int a, int b) {
return a - b;
}
// a * b
int Multiply(int a, int b) {
return a * b;
}
// a / b
float Division(int a, int b) {
return (float)a / (float)b;
}
接着是四则运算的使用:
/**
* test.cpp
*/
#include <iostream>
#include "my_math.h"
using namespace std;
int main() {
int a = 10;
int b = 3;
cout << "add: " << Add(a, b) << endl;
cout << "minus: " << Minus(a, b) << endl;
cout << "multiply " << Multiply(a, b) << endl;
cout << "division: " << Division(a, b) << endl;
}
请注意,这个使用四则运算的test.py
中只使用了头文件,现在还运行不了,我们需要通过动态链接库来给test.py
提供四则运算的实现,也就是说,我们需要把my_math.cpp
编译成动态链接库。
将当前文件夹加入动态链接库搜索路径
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
这个命令的意思是将当前目录加入动态链接库搜索路径,否则我们需要将生成的动态链接库加入/usr/lib
。
编译my_math.cpp
g++ -c my_math.cpp -o my_math.o
将my_math编译成动态库
g++ -shared my_math.o -o libmy_math.so
这里请注意动态链接库的命名格式为:lib<自命名>.so
编译 test.cpp
g++ test.cpp -o ./test -L. -lmy_math
-L<Path>
参数指定链接库的路径,-l<自命名>
指定具体动态链接库名称。
运行test
./test
可看到输出:
add: 13
minus: 7
multiply 30
division: 3.33333
大功告成。