快速业务通道

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

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-21
接使用-L和-I参数指定搜索非标准的库文档和头文档的路径.例如:

  arm-linux-gcc test.c -L/usr/local/arm/2.95.3/arm-linux/lib -I/usr/local/arm/2.95.3/arm-linux/include

  (2)、使用ld.so.conf文档,将用到的库所在文档目录添加到此文档中,然后使用ldconfig命令刷新缓存.

  (3)、使用如下命令:

  $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/2.95.3/arm-linux-lib

  参见《ld.so.conf 文档和PKG_CONFIG_PATH变量》这篇文章.

  通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(!).

  通过设定环境变量LD_LIBRARY_PATH也可以指定动态库搜索路径.当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔.

Empire CMS,phome.net

  不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运行,多用在调试.(LD_LIBRARY_PATH 的缺陷和使用准则,可以参考《Why LD_LIBRARY_PATH is bad》).通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找.

  (4)、交叉编译时使用软件的configure参数.例如我编译minigui-1.3.3,使用如下配置:

  #!/bin/bash

  rm -f config.cache config.status

  ./configure --build=i686-linux --host=arm-linux --target=arm-linux

  CFLAGS=-I/usr/local/arm/2.95.3/arm-linux/include

  LDFLAGS=-L/usr/local/arm/2.95.3/arm-linux/lib

  --prefix=/usr/local/arm/2.95.3/arm-linux

  --enable-lite

  --disable-galqvfb

  --disable-qvfbial

  --disable-vbfsupport

  --disable-ttfsupport

  --disable-type1support

  --disable-imegb2312py

  --enable-extfullgif

  --enable-extskin

  --disable-videoqvfb

  --disable-videoecoslcd

  这里我配置了CFLAGS和LDFLAGS参数,这样一来,我就不用去修改每个Makefile里-L和-I参数了,也不用再去配置LD_LIBRARY_PATH或改写ld.so.conf文档了.

  Linux下动态库使用小结

  1. 静态库和动态库的基本概念

  静态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大.动态库,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用.使用动态库编译生成的程序相对较小,但运行时需要库文件支持,如果机器里没有这些库文件就不能运行.

  2. 如何使用动态库

  如何程序在连接时使用了共享库,就在运行的时候能够找到共享库的位置.linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜索绝对路径.同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在/etc/rc.d/rc.local或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH).并且LD_LIBRARY_PATH路径优先于系统默认路径之前查找(详细参考《使用 LD_LIBRARY_PATH》).

Empire CMS,phome.net

  不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运行,多用在调试.(LD_LIBRARY_PATH 的缺陷和使用准则,可以参考《Why LD_LIBRARY_PATH is bad》).通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号