美文网首页
动态库的制作和使用

动态库的制作和使用

作者: 54c1eca7148a | 来源:发表于2019-05-27 09:21 被阅读0次

    1、动态库的命名方式

        动态库命名:lib+库名.so。如libtmath.so

    2、动态库的制作和使用

    (1)将需要添加到动态库的源文件编译为与位置无关的目标文件(与位置无关是指:

    使用nm 命令查看静态库二进制文件、目标文件时,出现:

    。。。

    080383e4 T add

    08038335 T sub

    08038328 T mul

    08038316 T div

    。。。

    每行前面有一个地址,表示执行起始位置为固定位置,动态库制作中就要试它每次执行位置不固定。使得可执行程序在加载时才从依赖的库文件中找到相应函数,加载到内存,但是加载到内存的位置时不确定的,这就叫与位置无关。

    (2)将目标文件添加到动态库中

    (3)使用动态库链接目标文件,生成可执行文件

    例:以静态库制作同例

    2、动态库的制作和使用(为方便观察现将原来目标文件和库文件删除)

    (1)将需要添加到动态库的源文件编译为与位置无关的目标文件

        gcc -c -fPIC *.c

        -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对  地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

    (2)将目标文件添加到动态库中

        gcc -shared -o libtmath.so *.o

        shared选项:指定生成动态库文件

    (3)使用动态库链接目标文件,生成可执行文件

        gcc tt1.c -Ltmath -ltmath -o tt

    -L和-l选项说明见静态库制作与使用的笔记末尾链接,注意此时还不能执行可执行程序,因为还需要指定加载器加载路径,使用ldd命令可以查看可执行程序依赖的动态库文件。

    a.可以使用环境变量LD_LIBRARY_PATH来指定加载器的寻找路径。即指定动态库文件的路径

    b.加载有默认的加载路径,可以讲动态库文件拷贝到相关位置。

    3、动态库和静态库共存时默认采用动态链接,如需采用静态链接,需使用-static选项来进行指定。

    4、使用-v选项可以查看到include的路径,包括“”和<>两种路径。可以将库拷贝到相关的路径

    相关文章

      网友评论

          本文标题:动态库的制作和使用

          本文链接:https://www.haomeiwen.com/subject/vwanzqtx.html