快速业务通道

静态库和共享库 库的定位搜索路径

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-21
中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找.

  3.库的链接时路径和运行时路径

  现代连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性.比如我们做嵌入式移植时#arm-linux-gcc $(CFLAGS) –o target –L/work/lib/zlib/ -llibz-1.2.3 (work/lib/zlib下是交叉编译好的zlib库),将target编译好后我们只要把zlib库拷贝到开发板的系统默认路径下即可.或者通过- rpath(或-R )、LD_LIBRARY_PATH指定查找路径.

  小问题:

  1.编译时的-L选项是否影响LD_LIBRARY_PATH的值?

  举一个实例:

  当前文件夹结构如下:

  test.c tools/

  tool下有tool.c tool.h my_err.h 以及由此生成的libtool.so

  tool下编译生成库文件

  gcc -Wall -g -shared -o tool.so tool.c

  在当前文件夹引用:

  gcc -Wall -g –o test.c -Ltools -ltool

  编译不报错,但是运行加载的时候就出现cannot open shared object file.

  如果将该库文件拷贝到/usr/lib下就没有错误,正常运行.

  说明编译时的-L选项并不影响环境变量LD_LIBRARY_PATH,-L只是指定了程序编译连接时库的路径,并不影响程序执行时库的路径,系统还是会到默认路径下查找该程序所需要的库.

  有关动态链接库需要注意的相关事项

  1.有关动态链接库需要注意的相关事项.

  如果碰到有GTK 的程序中 有 <gtkgtk.h>

  那么需要加入动态链接库的参数

  $ gcc test_a.c test_b.c iptbox.c -fPIC -shared -o iptbox.so `pkg-config --cflags --libs gtk -2.0

  生成出来的.so 动态链接库 需要放在usr/lib 目录下

Empire CMS,phome.net

  cp libipt.so /usr/lib

  2、在运行AP时出现错误,可以使用下列方式来查找问题:

  strace ./test

  3、查找文件夹下路径:

  find /usr/lib -name libipt.so

  4、解压缩命令:

  tar -zxvf 文件名

  5、解RPM包的方式:

  #rpm -ivh scim-1.4.7.4-1benX.src.rpm

  #cd /usr/src/dorado/SPECS

  #rpmbuild -bb scim.spec

  6、目录权限打开:

  chmod 777 root(目录名称)

  7、linux 下安装软件三步骤:

  a. ./configure

  b. make

  c. make install

  8、更新库引用:

  ldconfig

  9、查找是否有安装该AP.

  # whereis scim-ppenglish

Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号