您的位置:首页 > 运维架构 > Linux

Linux中C++编译、使用动态链接库

2018-02-07 15:44 323 查看
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


大功告成。

原文地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: