Linux下制作C++动态库

动态链接库是程序运行时加载的库,当动态链接库正确部署之后,运行的多个程序可以使用同一个加载到内存中的动态库,因此在 Linux 中动态链接库也可称之为共享库。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址使用的是相对地址(静态库中使用的是绝对地址),其真实地址是在应用程序加载动态库时形成的。

关于动态库的命名规则如下:

  1)在 Linux 中动态库以 lib 作为前缀,以.so 作为后缀,中间是库的名字自己指定即可,即: libxxx.so

  2)在 Windows 中动态库一般以 lib 作为前缀,以 dll 作为后缀,中间是库的名字需要自己指定,即: libxxx.dll

生成动态链接库是直接使用 g++ 命令并且需要添加 -fPIC(-fpic) 以及 -shared 参数。

  1)-fPIC 或 -fpic 参数的作用是使得 g++ 生成的代码是与位置无关的,也就是使用相对位置。

  2)-shared参数的作用是告诉编译器生成一个动态链接库。

生成动态链接库的具体步骤如下:

一、将源文件进行汇编操作,需要使用参数 -c, 还需要添加额外参数 -fpic /-fPIC,得到若干个 .o文件:

  $ g++ 源文件(*.cpp) -c -fpic

二·、将得到的.o 文件打包成动态库,还是使用 g++, 使用参数 -shared 指定生成动态库 (位置没有要求)

  $ g++ -shared 与位置无关的目标文件(*.o) -o 动态库(libxxx.so)

三、发布动态库和头文件

  1)提供头文件: xxx.h

  2)提供动态库: libxxx.so

四、动态库的使用

当我们得到了一个可用的动态库之后,需要将其放到一个目录中,然后根据得到的头文件编写测试代码,对动态库中的函数进行调用。

1)拿到发布的动态库

  `head.h libcalc.so

2)基于头文件编写测试程序, 测试动态库中提供的接口是否可用

  `main.cpp`

3)编译测试程序

  $ g++ main.cpp -o app

posted @ 2021-08-23 21:32  Jcpeng_std  阅读(1519)  评论(0编辑  收藏  举报