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

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

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

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

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

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

gcc -c sqlite3.c shell.c -fPIC
gcc -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)

你可能感兴趣的:(linux编译生成动态链接库与静态链接库)