zoukankan      html  css  js  c++  java
  • [置顶] 动态库*.so制作-linux

    在linux下制作动态库*.so。


    1、linux下动态库的制作

    //so_test.h
    #include "stdio.h"
    void test_a();
    void test_b();
    void test_c();

    //test_a.c
    #include "so_test.h"
    void test_a()
    {
    printf("this is in test_a... ");
    }

    //test_b.c
    #include "so_test.h"
    void test_b()
    {
    printf("this is in test_b... ");
    }

    //test_c.c
    #include "so_test.h"
    void test_c()
    {
    printf("this is in test_c... ");

    }


    生成动态库:libtest.so
    # gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so


    2、动态库与头文件位置

    # cp  libtest.so  /lib/

    # cp  so_test.h   /usr/include/

     

    3、动态库的链接

    测试程序


    //test.c
    #include <so_test.h>
    int main()
    {
    test_a();
    test_b();
    test_c();
    return 0;

    }


    将test.c与动态库libtest.so链接生成执行文件test:

    #  gcc test.c -L. -ltest -o test


    测试是否动态连接,如果列出libtest.so,那么应该是连接正常了
    #  ldd test


    4、编译参数解析


    -shared

    该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号);

    不用该标志外部程序无法连接,相当于一个可执行文件;


    -fPIC

    表示编译为位置独立的代码;

    不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的;


    -L.

    表示要连接的库当前目录


    -ltest

    编译器查找动态连接库时---隐含的命名规则[注释:libtest.so  ==  -ltest  /  libhello.so ==  -lhello ]


    LD_LIBRARY_PATH

    这个环境变量指示动态连接器可以装载动态库路径

    修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,不过如果没有root权限,那么只能采用输出LD_LIBRARY_PATH的方法了。





  • 相关阅读:
    jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
    jQuery选择器大全
    Jquery插件 easyUI属性汇总
    JQuery EasyUI 对话框的使用方法
    jQuery Alert Dialogs (Alert, Confirm, & Prompt代替方案)
    JavaScript 开发者经常忽略或误用的七个基础知识点
    如何学习Javascript
    父子页面之间跨域通信的方法
    .NET中常见的内存泄露问题——GC、委托事件和弱引用
    启动外部exe程序
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3268670.html
Copyright © 2011-2022 走看看