zoukankan      html  css  js  c++  java
  • Linux下的静态库和动态库 yg2362 C++博客

    Linux下的静态库和动态库 - yg2362 - C++博客

    1.制作自己的动态库和静态库

    linux下动态库以.so结尾,静态库以.a结尾,它们都以lib开头,比如一个库名为net,那么它的全名应该是libnet.so或者libnet.a

    我们有两个文件,hello.ctest.c,下面是两个文件的内容

    //hello.c

    #include <stdio.h>

     

    void my_lib_func()

    {

    printf("Library routine called\r\n");

    }

     

    //test.c

    #include <stdio.h>

     

    int main()

    {

    my_lib_func();

     

    return 1;

    }

     

    test.c调用了hello.c的方法,我们把hello.c封装成库文件。无论是静态库还是动态库,都是由.o文件组成,我们先把gcc -c hello.c生成.o文件

    制作静态库

    ar crv libmyhello.a hello.o,ar是生成静态库的命令,libmyhello.a是我的静态库名。下一步就是在我的程序中使用静态库

     

    可以看到已经有了Library routine called的结果,说明调用成功了。

    下面我们删除libmyhello.a,看看程序是否还是运行正常

    我们发现程序依然运行正常,说明静态库已经连接进入我们的程序中

    制作动态库

    我们看见动态库libmyhello.so已经生成,下面继续使用

    找不到库文件,这个时候我们把so文件拷贝到/usr/lib下面

    运行成功

     

    2.动态库和静态库同时存在的调用规则

    我们可以发现,不论是动态库还是静态库,程序编译连接的时候都是加的参数-l,那么当他们同时存在的时候,程序会选择动态库还是静态库呢。我们做个尝试。

    我们同时存在libmyhello.alibmyhello.so,我们发现运行的时候,出现找不到动态库的错误,由此,我们可以得出结论,同时存在动态库和静态库的时候,gcc会优先选择动态库

  • 相关阅读:
    唐寅 《桃花庵歌》
    asp.net 后台隐藏div
    dataset的用法
    C#中的DateTime类型加减
    discuz! x2.5 文章添加分享按钮
    asp.net学习小网站
    table固定行和表头
    aspx.net开源的画图组件
    Global.asax详解
    int.Parse() int.TryParse
  • 原文地址:https://www.cnblogs.com/lexus/p/2622524.html
Copyright © 2011-2022 走看看