Linux 下动态链接库(shared object file,共享对象文件)的文件后缀为.so,它是一种特殊的目标文件(object file),可以在程序运行时被加载(链接)进来。使用动态链接库的优点是:程序的可执行文件更小,便于程序的模块化以及更新,同时,有效内存的使用效率更高。

1 生成动态库.so文件

另外还得结合-fPIC选项。-fPIC 选项作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code);这样一来,产生的代码中就没有绝对地址了,全部使用相对地址,所以代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

  1. g++ swap.cpp -fPIC -shared -o lib.so

2 链接生成可执行文件

g++ main.cpp -l Swap -L src -I include -o dynamic_main

3 运行动态链接的可执行文件


例子

image.png

test.h

#include "stdio.h"
void test_a();
void test_b();
void test_c();
gcc a.c b.c c.c -fPIC -shared -o lib.so