cuijpus的专栏

关注范围:Telecommunication, Mobile , Embedded Linux。好记性,不如烂笔头。

用户操作
[即时聊天] [发私信] [加为好友]
崔计平ID:cuijpus
51236次访问,排名2233(-1),好友22人,关注者49人。
做手机研发5年多,涉及app, middleware, driver等;好记性不如烂笔头,随手写些,免得忘记了。
cuijpus的文章
原创 155 篇
翻译 0 篇
转载 47 篇
评论 56 篇
cuijpus的公告
目前正在分析研究7个Linux手机平台的异同点


最近评论
qiuyu:您好,我想问一下是不是第三方开发只需LiMo的应用程序编程接口,在此基础上编程就可以了?我看了一下我得linux平台下并没有这个API的实现程序,这样的话只根据接口函数就能使用?一般情况下的话是不是得需要个库之类的文件呀?我是新手,请赐教!
yuhang111:我想还是兼容性的问题,maemo的不少组件是基于debian开发的, 所有应该更方便的在ubuntu上使用吧。当然用fedora也可以,好像虚拟机下用fedora要比ubuntu慢些吧。
wei04:请问D-BUS的C API是线程安全的么?
Liyonn8744:您好,Maemo平台的宿主Linux一定要用ubuntu的吗?用Fedora Core 6可以吗?有什么区别呢?谢谢~
SearchSun:同期待,如果有一个通过libosso封装的D-BUS来调用media player的例子就好了
文章分类
收藏
相册
常去的网站
linux mobile research圈子
存档
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 关于shared library的描述。收藏

新一篇: Linux下time/timestamp相关。 | 旧一篇: 进程的一生。

以前搞共享库动态加载管理时找的一些资料,放在这里共享。

 

引言:
xmeeting中,usb手柄部分,采用动态库调用方式,下面翻一篇David A. Wheeler的文章。文章就如何建和使用态库,共享以及如何动态载库进行了述。要如下:
 1.

 2.
态库
 3.
共享
   3.1

       3.2
使用
    3.3

   3.4
建共享
   3.5
安装使用
   3.6
兼容性
 4.
动态
   4.1 dlopen()
   4.2 dlerror()
   4.3 dlsym()
   4.4 dlclose()
   4.5
示例
 5.
助知
   5.1 nm
命令
   5.2

   5.3
脚本
   5.4
版本
   5.5 GNU libtool
    5.6
去除符
   5.7
外部行体
    5.8 C++
C
   5.9
加速C++初始化

   5.10 Linux

1.

 
本文就如何在LinuxGNU工具建和使用程序库进述。所"程序"简单说,就是包含了据和的文件。其不能单独执行,可以作行程序的一部分,完成行功能。的存在,可以使得程序模化,可以加快程序的再编译,可以实现重用,可以使得程序便于升。程序可分三态库,共享动态载库

  态库,是在行程序行前就已加入到中,在物理上成为执行程序的一部分;共享,是在行程序动时行程序中,可以被多行程序共享使用。动态载库,其实并不是一种真正的库类型,应该是一种库的使用技用程序可以在程中和使用
 
议库开发员创建共享,比优势在于立的,便于维护和更新;而态库的更新比,一般不做推荐。然而,又各有点,后面到。在C++程中,要使用动态,需要考文章"C++ dlopen MINI-Howto"
 
文章中述的行程序和都采用ELF(Executable and Linking Format)格式,GNU GCC 工具可以理其格式,但不在本文的讨论。本文可以在 http://www.dwheeler.com/program-library http://www.linuxdoc.org 找到。

2.态库
 
态库可以认为是一些目的集合。按照习惯,一般以".a"文件后名。使用ar(archiver)命令可以态库。因共享有着更大的优势态库不被常使用。但态库使用简单,仍有使用的余地,并会一直存在。

  态库用程序生成,可以不必再编译省再编译时间。但在编译器越越快的今天,一点似乎已不重要。如果其他开发要使用的代,而又不想其源,提供态库是一种选择用程序使用了态库,要比使用动态载库速度快1-5%,但由于莫名的原因,实际上可能非如此。由此看,除了使用方便外,态库可能非一好的选择

  建一个静态库,或要加入到已存在的态库中,可以使用以下命令:
  ar rcs my_libraty.a file1.o file2.o
 
以上表示要把目标码file1.ofile2.o加入到态库my_library.a中。若my_library.a不存在,动创建。
 
 
态库创建成功后,需要接到用程序中使用。如果使用gcc(1)行程序,需要利用-l选项来指定态库。更多信息,gcc使用手

  在使用gcc,要注意其参数序。-l接器选项,一定要放在被编译的文件名之后;若放在文件名之前,你会接失并会莫名其妙的错误一点切
 
 
也可以直接使用接器ld(1),使用其选项-l-L。但最好使用gcc(1),ld(1)的接口有可能化。

3.共享
 
共享是在程序动时被装用程序装了一共享后,其用程序仍可以装同一共享。基于linux的使用方法,共享库还有其它灵活的而又精妙的特性:
  
更新库并不影用程序使用的,非向后兼容的版本;
  
行特定程序,可以覆盖整或更新中的特定函
  
以上操作不经运行的程序,他使用已

3.1
  
要想共享具有以上特性,一些定需要遵守。需要掌握共享,特是搜名(soname)(realname)系;需要知道共享在文件系的位置。
3.1.1

 
共享都有一特定的搜名(soname),成如下:
  lib  + 
  +  .so  +  .  +  version
   |       |        |_______________|
 
               

 
在文件系中,搜名是一指向名的符联结

  共享也有一名,其正包含有的代成如下:
 
搜名 +  .   +  子版本 + . +
 
最后的句点和