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++编译使用动态链接库的主要内容,如果未能解决你的问题,请参考以下文章

在 gcc Linux 中将静态库链接到动态库

Linux C++ g++ -ldl编译参数(链接libdl.so动态库,头文件<dlfcn.h>)(Dynamic Linker的缩写)(混链接混合链接)

Linux下gcc编译生成动态链接库*.so文件并调用它转载

linux下,有几个.so。如何将这几个动态库编译成一个动态库

C++动态链接库实践

在 linux 中编译/链接多个 c++ 库