main.c:
#include <stdio.h>#include"foo.h"intmain(void) { puts("This is a shared library test..."); foo();return0; }
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
盖楼回复 X
(您的评论需要经过审核才能显示)