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
本文来自博客园,作者:Jcpeng_std,转载请注明原文链接:https://www.cnblogs.com/JCpeng/p/15177836.html