• 动态库*.so制作


    转自:http://www.2cto.com/os/201308/238936.html

    在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的方法了。
  • 相关阅读:
    鸟哥的linux私房菜学习-(八)Linux 文件与目录管理
    我的作品
    聊聊软件测试面试的一些事
    如何做一名专业的软件测试工程师
    测试Leader应该做哪些事
    软件测试工程师的岗位职责
    一个完整的性能测试流程
    做接口测试需要哪些技能
    软件质量保障体系建设
    性能测试常见瓶颈分析及调优方法
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/4214638.html
Copyright © 2020-2023  润新知