linux 怎么使用一个c/c++库

使用一个库,库有动态和静态之分。

静态库只要能够编译通过,运行时就没有提示缺少这个库可能,因为把这个库就是这个使用者的一部分了。
动态库。两部分。
1 库信息的注册

主要是名字,其次有运行时到哪里找,找到后加载到什么位置。在编译部分完成,通常做法使用 -lxxx 参数参数传递给gcc。比如libxml2.so,

gcc *.c -lxml2 -o a.out

那么

  1. # ldd a.out
  2. ....
  3. libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007f6e935db000)
  4. ....
这个就是把libxml2.so.2的使用注册完成了。这是为运行时使用准备的。

2 声明库存放的位置。

老生常谈的问题,寻找库的是ld.so,标准路径是/bin /bin64 /usr/bin /usr/bin64.
这些都记录在/etc/ld.so.cache. 这是ld.so直接找的地方。没有在这里注册的,放在标准路径,一般情况下也是不行的,照旧提示找不到。
/etc/ls.so.cache的来源。ldconfig 命令生成。

  1. ldconfig

ldconfig会遍历/etc/ld.so.conf文件,一行一个路径,一个路径一个路径的寻找,把动态库和它的绝对路径写在/etc/ld.so.cahce中,加速查找。

  1. # cat /etc/ld.so.conf
  2. /usr/X11R6/lib64/Xaw3d
  3. /usr/X11R6/lib64
  4. /usr/lib64/Xaw3d
  5. /usr/X11R6/lib/Xaw3d
  6. /usr/X11R6/lib
  7. /usr/lib/Xaw3d
  8. /usr/x86_64-suse-linux/lib
  9. ....

cache 是个没有换行符的文件,a.so 路径b.so 路径...,就这样排列,一般用这个命令查看

  1. # ldconfig -p
  2. ......
  3. libx86.so.1 (libc6,x86-64) => /usr/lib64/libx86.so.1
  4. libx86.so (libc6,x86-64) => /usr/lib64/libx86.so
  5. libxtables.so.4 (libc6,x86-64) => /usr/lib64/libxtables.so.4
  6. libxslt.so.1 (libc6,x86-64) => /usr/lib64/libxslt.so.1
  7. libxslt.so.1 (libc6) => /usr/lib/libxslt.so.1
  8. libxrxnest.so (libc6,x86-64) => /usr/lib64/libxrxnest.so
  9. libxrx.so (libc6,x86-64) => /usr/lib64/libxrx.so
  10. libxml2.so.2 (libc6,x86-64) => /usr/lib64/libxml2.so.2
  11. libxml2.so.2 (libc6) => /usr/lib/libxml2.so.2
  12. .......

很清爽。
当然这都是root干的,变量LD_LIRARY_PATH给了平民自由,没有找到的会在这个变量下搜。
所以,声明库的位置应该在/etc/ld.so.cache 和 LD_LIBRARY_PATH中,这些地方没有,就等着报错吧。

linux 怎么使用一个c/c++库的更多相关文章

  1. Linux命令之ar - 创建静态库.a文件和动态库.so

    转自:http://blog.csdn.net/eastonwoo/article/details/8241693 用途说明 创建静态库.a文件.用C/C++开发程序时经常用到,但我很少单独在命令行中 ...

  2. 在Linux下写一个简单的驱动程序

    本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...

  3. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap

    Systemtap的原理,Systemtap与DTrace比较,以及安装要求和安装步骤本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprob ...

  4. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace

    DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式.诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用 ...

  5. 【Android手机测试】linux内存管理 -- 一个进程占多少内存?四种计算方法:VSS/RSS/PSS/USS

    在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/USS四种形式,这四种形式首字母分别是Virtual/Resident/Proportional/Unique的意思. ...

  6. Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS

    关键词:VSS.RSS.PSS.USS._mapcount.pte_present.mem_size_stats. 在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/US ...

  7. linux下,一个运行中的程序,究竟占用了多少内存

    linux下,一个运行中的程序,究竟占用了多少内存 1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用 ...

  8. Linux中创建和使用静态库&动态库

    库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行 Linux下库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在 ...

  9. Linux 关于动态链接库以及静态链接库的一些概念

    库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhe ...

随机推荐

  1. X窗口系统名词解释

    前端时间Gentoo的桌面环境出了点问题,发现自己对Linux的桌面环境了解的很少,于是恶补了一下知识,以下名词解释基本上都是来自维基百科的条目和<Linux程序设计(第三版)>.一般而言 ...

  2. Android_简单笔记一

    入门学习Android的简单笔记(已经安装好了开发环境ADT) 一.关于 AndroidManifest.xml文件 1. android:icon和android:label定义了应用程序安装后显示 ...

  3. Java 螺纹第三版 第三章数据同步 读书笔记

    多线程间共享数据问题 一.Synchronizedkeyword      atomic一词与"原子"无关,它以前被觉得是物质的最小的单元,不能再被拆解成更小的部分.      当 ...

  4. WPF DataGrid 增加"更新"模板列,根据行Row的选择而显示"更新"按钮

    SelectionMode="Single" <DataGridTemplateColumn Header=""> <DataGridTemp ...

  5. <context-param>与<init-param>的区别与作用(转)

    <context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件we ...

  6. 高焕堂《android从程序员到架构师之路》 YY讲坛直面大师学习架构设计

    <android从程序员到架构师之路>YY讲坛活动:  sundy携手高焕堂老师全程YY答疑 与大师一起,分享android技术 时间:7月21日下午2:00   报名联系QQ:22243 ...

  7. oc 可变參数传递

    - (id)initWithFrame:(CGRect)frame delegate:(id<SGFocusImageFrameDelegate>)delegate focusImageI ...

  8. Java开源运行分析工具(转)

      FProfiler  FProfiler是一个非常快的Java profiler.它利用BCEL和log4j来记录每个方法从开始到结尾的日记.FProfiler可以用来在你的应用程序,Servle ...

  9. 基于visual Studio2013解决C语言竞赛题之1064互质数差1验证

       题目 解决代码及点评 /* 64. 任意两个互质的自然数, 经过若干次加减后,总可获得结果为1的数值. 所谓互质数(即互素的数),是指这两个数除 1外再没有其它公因数. 如14,9为 ...

  10. OpenCV中遇到Microsoft C++ 异常 cv::Exception

    我在实现<OpenCV2计算机视觉编程手册>第2章 2.2 节 存取像素值 中的椒盐噪声例子中遇到的程序错误. 原始输入程序: #include <opencv2/core/core ...