linux 怎么使用一个c/c++库
linux 怎么使用一个c/c++库
使用一个库,库有动态和静态之分。
静态库只要能够编译通过,运行时就没有提示缺少这个库可能,因为把这个库就是这个使用者的一部分了。
动态库。两部分。
1 库信息的注册
主要是名字,其次有运行时到哪里找,找到后加载到什么位置。在编译部分完成,通常做法使用 -lxxx 参数参数传递给gcc。比如libxml2.so,gcc *.c -lxml2 -o a.out
那么
- # ldd a.out
- ....
- libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007f6e935db000)
- ....
这个就是把libxml2.so.2的使用注册完成了。这是为运行时使用准备的。
2 声明库存放的位置。
老生常谈的问题,寻找库的是ld.so,标准路径是/bin /bin64 /usr/bin /usr/bin64.
这些都记录在/etc/ld.so.cache. 这是ld.so直接找的地方。没有在这里注册的,放在标准路径,一般情况下也是不行的,照旧提示找不到。
/etc/ls.so.cache的来源。ldconfig 命令生成。
- ldconfig
ldconfig会遍历/etc/ld.so.conf文件,一行一个路径,一个路径一个路径的寻找,把动态库和它的绝对路径写在/etc/ld.so.cahce中,加速查找。
- # cat /etc/ld.so.conf
- /usr/X11R6/lib64/Xaw3d
- /usr/X11R6/lib64
- /usr/lib64/Xaw3d
- /usr/X11R6/lib/Xaw3d
- /usr/X11R6/lib
- /usr/lib/Xaw3d
- /usr/x86_64-suse-linux/lib
- ....
cache 是个没有换行符的文件,a.so 路径b.so 路径...,就这样排列,一般用这个命令查看
- # ldconfig -p
- ......
- libx86.so.1 (libc6,x86-64) => /usr/lib64/libx86.so.1
- libx86.so (libc6,x86-64) => /usr/lib64/libx86.so
- libxtables.so.4 (libc6,x86-64) => /usr/lib64/libxtables.so.4
- libxslt.so.1 (libc6,x86-64) => /usr/lib64/libxslt.so.1
- libxslt.so.1 (libc6) => /usr/lib/libxslt.so.1
- libxrxnest.so (libc6,x86-64) => /usr/lib64/libxrxnest.so
- libxrx.so (libc6,x86-64) => /usr/lib64/libxrx.so
- libxml2.so.2 (libc6,x86-64) => /usr/lib64/libxml2.so.2
- libxml2.so.2 (libc6) => /usr/lib/libxml2.so.2
- .......
很清爽。
当然这都是root干的,变量LD_LIRARY_PATH给了平民自由,没有找到的会在这个变量下搜。
所以,声明库的位置应该在/etc/ld.so.cache 和 LD_LIBRARY_PATH中,这些地方没有,就等着报错吧。
linux 怎么使用一个c/c++库的更多相关文章
- Linux命令之ar - 创建静态库.a文件和动态库.so
转自:http://blog.csdn.net/eastonwoo/article/details/8241693 用途说明 创建静态库.a文件.用C/C++开发程序时经常用到,但我很少单独在命令行中 ...
- 在Linux下写一个简单的驱动程序
本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap
Systemtap的原理,Systemtap与DTrace比较,以及安装要求和安装步骤本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprob ...
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace
DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式.诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用 ...
- 【Android手机测试】linux内存管理 -- 一个进程占多少内存?四种计算方法:VSS/RSS/PSS/USS
在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/USS四种形式,这四种形式首字母分别是Virtual/Resident/Proportional/Unique的意思. ...
- Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS
关键词:VSS.RSS.PSS.USS._mapcount.pte_present.mem_size_stats. 在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/US ...
- linux下,一个运行中的程序,究竟占用了多少内存
linux下,一个运行中的程序,究竟占用了多少内存 1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中 VSZ(或VSS)列 表示,程序占用 ...
- Linux中创建和使用静态库&动态库
库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行 Linux下库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在 ...
- Linux 关于动态链接库以及静态链接库的一些概念
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhe ...
随机推荐
- Python之路day4
坚持就是胜利.今天零下14度,从教室出来的路上真的很冷很冷,希望这个冬天自己不会白过,春暖花开的时候一定要给世界一个更好的自己. 原本以为day3的作业自己做得挺好的,没想到只得了B+.必须要加油了, ...
- ARM相关知识
ARM7采用冯·诺依曼(Von-Neumann)结构,数据存储器和程序存储器重合在一起. 同时,此结构也被大多数计算机所采用. ARM7为三级流水线结构(取指,译码,执行),平均功耗为0.6mW ...
- 基于visual Studio2013解决C语言竞赛题之1032平方和
题目 解决代码及点评 /* 编程序将一个正整数写成其它两个正整数的平方和,若不能成立时输出"NO".例如 5 = 1^2 + 2^2 , 25 ...
- C# c++ 传递函数指针
C#和c++之间相互传递函数指针 在C++和C#之中都有很多callback method,可以相互调用吗,怎么传递,是我表弟的问题. 1.定义c++ dll ,导出方法 // sort.cpp : ...
- 最近盯着accesslog看,发现许多奇怪的东东
1.spider,各式各样的spider,就像海里的游鱼 有大的,有小的 2.各类探测http代理的spider,比如这种日志 60.173.14.85 - - [03/Sep/2013:09:59: ...
- hdu1104 Remainder bfs找算式是否有解……
须要注意的是,进行模运算剪枝-- #include<iostream> #include<queue> #include<cstdlib> #include< ...
- Eclipse用法和技巧六:自动生成get和set方法1
java的类中,除了常量声明为静态且公有的,一般的对象数据作用域,都是声明为私有的.这样做能保护对象的属性不会被随意改变,调试的时候也会方便很多:在类的公有方法中大一个调用栈就能看到哪里改了属性值.声 ...
- 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序
原文 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 Jim ...
- Mac+IPAD上使用wireshark抓包
首先先下载wireshark和Xquartz wireshark地址: http://www.wireshark.org/download.html Xquartz 地址:http://xquartz ...
- ABAP 常用FUNCTION集锦(转)
此文章从网上抄摘,目的用于自己记录 DYNP_VALUES_READ – 读取SCREEN字段的值,也可以用来读取报表SELECTION SCREEN. DYNP_VALUES_UPDATE – 更新 ...