linux系统下使用命令行开发C/C++程序一般都会用到gcc/g++这个编译工具。大多数学过linux的同学都应该知道关于gcc/g++这个编译工具的简单应用,比方说-c,-o,-S,-E,-g等这些参数。这里我对这些相对比较基础的编译选项就不再赘述了。接下来我要说一下如何利用这个工具编译生成动态链接库。
首先我要介绍一下链接库的用处和种类,实际上链接库是实现函数库共享的一种方式,也就是说我将一个方法或者函数编译成一个链接库,这样我在其他的程序中就可以使用这个方法或者函数,只需声明即可。链接库有两种类型分别为静态和动态链接库,静态链接库以.a为扩展名,动态链接库以.so为扩展名,两种链接库的区别主要在于在编译生成目标代码的过程,静态链接库会全部整合进入目标代码,而动态链接库只是在执行目标代码的过程中动态的调用。
接下来我们从一个简单的例子来进行详细介绍。
(1)首先我在当前用户目录下创建一个sayhello.cpp文件,文件包含一个sayhello()方法,代码如下:
#include <iostream>
using namespace std;
void sayhello()
{
cout << "Hello" << endl;
}
然后我们将其编译成一个动态链接库,命令如下:
g++ -fPIC -shared -o libsayhello.so sayhello.cpp
-fPIC作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,实现真正意义上的共享。