linux编译生成动态链接库与静态链接库

来源:互联网 发布:面向对象编程语言有哪些 编辑:程序博客网 时间:2024/05/02 03:01

这里以sqlite源代码为例,我们有时候需要用sqlite作为嵌入式存储引擎,但是我的opensuse上又不能自动yast安装sqlite的开发包,我们就自行编译链接库吧。

首先下载sqlite3的源代码(共四个文件:shell.c,sqlite3.c,sqlite3ext.h,sqlite3.h)。

1,编译静态链接库libsqlite3.a

gcc -c sqlite3.c shell.car cr libsqlite3.a sqlite3.o shell.o
指定-c参数生成目标文件

2,编译动态链接库libsqlite3.so

gcc -c sqlite3.c shell.c -fPICgcc -shared -fPIC -o libsqlite3.so *.o
这里注意需要添加-fPIC参数重新编译源代码

然后目录下就有了两个链接库可用了。在编写程序用ldd查看链接库依赖关系如果缺少依赖的话,可以用下面的语句设置环境变量

export LD_LIBRARY_PATH=/usr/local/lib/

这样,所有的依赖包都找到了,如下所示

ciaos@ciaos-ubuntu:~/Downloads/mongodb$ ldd /usr/bin/sqlite3 linux-gate.so.1 =>  (0x00731000)libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0x00110000)libreadline.so.6 => /lib/i386-linux-gnu/libreadline.so.6 (0x004e2000)libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00ba1000)libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x0064d000)libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x009b0000)libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0x00707000)/lib/ld-linux.so.2 (0x00796000)