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的方法了。





  • 相关阅读:
    jmeter(二十三)分布式测试
    jmeter(二十二)内存溢出原因及解决方法
    jmeter(二十一)jmeter常用插件介绍
    jmeter(二十)阶梯式加压测试
    jmeter(十九)HTTP属性管理器
    《jmeter:菜鸟入门到进阶》系列
    jmeter(十八)关联之XPath Extractor
    <转>jmeter(十七)目录结构
    jmeter(十六)配置元件之计数器
    Springmvc中参数的绑定
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3268670.html
Copyright © 2011-2022 走看看