天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

Linux系统下的静态库和动态库

2012-11-17中国IT实验室佚名

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

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

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

  //hello.c

  #include

  void my_lib_func()

  {

  printf(“Library routine called\r\n”);

  }

  //test.c

  #include

  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.a和libmyhello.so,我们发现运行的时候,出现找不到动态库的错误,由此,我们可以得出结论,同时存在动态库和静态库的时候,gcc会优先选择动态库。

本文来源:中国IT实验室 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系email:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行