Linux中C++编译使用动态链接库
Posted zgljl2012
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
大功告成。
以上是关于Linux中C++编译使用动态链接库的主要内容,如果未能解决你的问题,请参考以下文章
Linux C++ g++ -ldl编译参数(链接libdl.so动态库,头文件<dlfcn.h>)(Dynamic Linker的缩写)(混链接混合链接)
Linux下gcc编译生成动态链接库*.so文件并调用它转载