main.c:

Linux使用GCC编译C语言共享库心得[多图]图片2
#include <stdio.h>#include"foo.h"intmain(void)
{
    puts("This is a shared library test...");
    foo();return0;
}
Linux使用GCC编译C语言共享库心得[多图]图片2

 

foo.h 定义了一个接口连接我们的库,一个简单的函数,foo()。foo.c包含了这个函数的实现,main.c是一个用到我们库的驱动程序。

为了更好的演示本例子,所有代码都放在/home/username/foo目录下。

 

Step 1: 编译无约束位代码

我们需要把我们库的源文件编译成无约束位代码。无约束位代码是存储在主内存中的机器码,执行的时候与绝对地址无关。

$gcc-c -Wall -Werror -fpic foo.c

 

Step 2: 从一个对象文件创建共享库

现在让我们将对象文件变成共享库。我们将其命名为libfoo.so:

$ gcc-shared -o libfoo.so foo.o

 

Step 3: 连接共享库

如你所见,一切都很简单。我们现在有了一个共享库。现在我们编译我们的main.c并且将它连接到libfoo。我们将最终的运行程序命名为test。注意:-lfoo选项并不是搜寻foo.o,而是libfoo.so。GCC编译器会假定所有的库都是以lib开头,以.so或.a结尾(.so是指shared object共享对象或者shared libraries共享库,.a是指archive档案,或者静态连接库)。

$gcc-Wall -o test main.c -lfoo/usr/bin/ld: cannotfind-lfoo
collect2:ldreturned1exit status