注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

仰望天空

记得常常仰望天空,记住仰望天空的时候也看看脚下

 
 
 

日志

 
 

linux创建和使用动态链接库.so文件  

2010-06-22 00:43:33|  分类: 学习笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        动态链接库文件在windows平台下往往以.dll为后缀,而在linux平台则一般以.so为后缀,so是shared object的缩写。
        采用gcc编译器,文件:adpcm.h, adpcm.c, main.c, 放在同一目录下(/home/hbapril)想做到windows和linux的文件共享,简单的设置共享不成功,其他方法好像要安装ftp或者其他专用软件的。
        main.c中调用adpcm中的函数,所以创建动态链接库,不然会报不能定位到头文件中声明的方法。打开终端,执行命令:

       gcc adpcm.c -fPIC -shared -o libtest.so

       在当前目录下会多一个libtest.so的文件。 -shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。     -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

      将main.c与动态库libtest.so链接生成执行文件test:
      gcc main.c -L. -ltest -o main

      -L.:表示要连接的库在当前目录中
      -ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称        

     测试是否动态连接,如果列出libtest.so,那么应该是连接正常了
     ldd test 

     这时候找不到libtest.so, 是动态链接库的查找路径出问题,将libtest.so复制到usr/lib 却不够权限,命令行加sudo都不行,使用动态链接库管理命令ldconfig,ldconfig命令主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。(LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,不过如果没有root权限,那么只能采用输出LD_LIBRARY_PATH的方法了,要用bash命令)。

采用前者:

~$ su
口令:
# su
# ldconfig
# pwd>>/etc/ld.so.conf                      //追加到存放库的缓存
# ldconfig                                          //更新一下
# ldconfig 'pwd'                               
/sbin/ldconfig.real: relative path `pwd' used to build cache
# ldd main                                       //再测试,可以找到了
    linux-gate.so.1 =>  (0x00d8f000)
    libtest.so => /home/hbapril/libtest.so (0x00655000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x006d8000)
    /lib/ld-linux.so.2 (0x00508000)

 

 执行main,可以运行了。

 

温习:
gcc编译C/C++命令:  gcc main.c -o main

                                   ./main

复制文件:sudo mv /home/ap/adpcm.c  usr/include 

  评论这张
 
阅读(948)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018