读书人

linux 动态库的创造和使用

发布时间: 2013-03-21 10:08:17 作者: rapoo

linux 动态库的创建和使用
简介

动态库相比动态库有以下优点:

    由于不用静态连接到使用库的每个程序中,使用动态库更节省内存;升级方便,升级动态库,可以不用重新编译使用库的程序;

注意:在x86架构下,使用动态库可能降低性能。

创建和使用共享库

我们使用上一篇《[wayz11@linux]$ makeg++ -Wall -L. -c -o main.o main.cppg++ -Wall -L. -fPIC -c -o say_hello.o say_hello.cppg++ -Wall -L. -fPIC -c -o say_world.o say_world.cppg++ -shared -Wl,-soname,libhelloworld.so.1 -o libhelloworld.so.1.0.0 say_hello.o say_world.o ln -sf libhelloworld.so.1.0.0 libhelloworld.soln -sf libhelloworld.so.1.0.0 libhelloworld.so.1g++ -Wall -L. -o main main.o -lhelloworld
我们解释一下上面的过程:

第一行生成main.o目标文件;

第二、三行中的-fPIC选项产生位置无关代码。由于动态库是在运行的时候被调入,在编译时,装入内存的地址还不知道,因此这个选项是必须的。这两行生成用于生成库的目标文件:say_hello.o和say_world.o。

第四行,-shared选项告诉编译器生成动态库。-Wl选项使得后面的选项-soname libhelloworld.so.1被传递给连接器。

第五、六行创建了两个软连接。

第七行生成可执行文件。

使用库

要想在程序正常运行,我们还需要告诉系统如何(或在哪)加载我们的共享库。

有如下两个方法:

libhelloworld.so拷贝到/etc/ld.so.conf中列举的任何目录,并以root身份运行ldconfig;或者在库所在目录,运行export LD_LIBRARY_PATH=`pwd`命令,把库所在目录加到共享库搜索路径中去。



读书人网 >UNIXLINUX

热点推荐