Linux 动态链接和静态链接简析(库名与库文件名)
来源:互联网 发布:php删除数据库指定元素 编辑:程序博客网 时间:2024/06/16 07:00
原文请见 Linux动态链接和静态链接简析
0. 库名与真正的库文件名
就拿数学库来说,他的库名是 m,他的库文件名是libm.so,很容易看出,把库文件名的头 lib 和尾.so去掉就是库名。(gcc xxx.c -lm( 动态数学库))
既然我们已经知道如何根据库文件名得到库名,那么在使用 gcc/g++ 编译一些文件时,又该如何使用库呢?比如我们自已要用到一个第三方提供的库名字叫 libtest.so,那么我们只要把 libtest.so 拷贝到 /usr/lib里,编译时加上-ltest 参数,我们就能用上 libtest.so 库了(当然要用 libtest.so库里的函数,我们还需要与 libtest.so 配套的头文件)。
放在 /lib 和 /usr/lib 和 /usr/local/lib 里的库直接用 -l 参数就能链接了,但如果库文件没放在这三个目录里,而是放在
其他目录里, 这时我们只用 -l 参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find
-lxxx”,也就是链接 程序 ld 在那3个目录里找不到libxxx.so,
1. 生成静态链接库
gcc -c h.c -o h.oar cqs libh.a h.o
- ar是生成库的命令,
- cqs是参数,
- libh.a是生成的静态链接库须以lib开头,h是库名,
- a表示是静态链接库,h.o是刚才生成目标文件
2. 生成动态链接库
gcc -c h.c -o h.o
生成动态链接库用gcc来完成
gcc -shared -WI -o libh.so h.o
- -shared -WI是参数(WarningImplicit),
- libh.so是生成的静态链接库须以 lib 开头,h是库名,
- so表示是动态链接库,h.o是刚才生成目标文件
3. 将生成的libh.a,libh.so拷贝到/usr/lib或/lib下
4. 编译带静态链接库的程序
gcc -c test.c -o test.ogcc test.o -o test -WI -Bstatic -lh
- -WI -Bstatic表示链接静态库,
- -lh 中 -l 表示链接,
- h 是库名即/usr/lib下的libh.a
5. 编译带动态链接库的程序
gcc -c test.c -o test.ogcc test.o -o test -WI -Bdynamic -lh
- -WI -Bdynamic表示链接动态库,
- -lh中-l表示链接,
- h是库名即/usr/lib下的libh.so
6. 运行。/test得到结果
有些库形如 libh.so.1.0, 1.0 表示版本号。若要使用该库,通常要建立一个软连接,用 ln -s libh.so.1.0 libh.so. 系统不知道1.0为何意思。
7. 其他知识
编译连接时同时要用动态和静态链接库,则用如下命令
gcc test.o -o test -WI -Bstatic -lh1 -WI -Bdynamic -lh2
8.动态库和静态库的位置问题
把动态库或者静态库放在/usr/lib或者/lib下,在链接的时候系统会自动到这两个目录下寻找。如果没有放在这两个目录下,则修改/etc/ld.so.conf文件,把目录写入该文件,然后ldconfig,就OK了。
如果没有放在usr/lib或者/lib目录下,也不修改/etc/ld.so.conf文件,也可以在编译的时候加上 -L/路径 也可以。但是在执行的时候还是会提示找不到库的所在。
- Linux 动态链接和静态链接简析(库名与库文件名)
- LINUX-动态链接与静态链接对比(动态库和静态库)
- Windows系统和Linux系统中的静态链接库与动态链接库(一)
- Windows系统和Linux系统中的静态链接库与动态链接库(二)
- 静态库链接、动态库静态链接和动态链接
- Linux 静态与动态链接库
- 简介 Linux 静态与动态链接库
- 简介 Linux 静态与动态链接库
- linux静态链接库与动态链接库
- Linux中的动态链接库与静态链接库
- Linux下动态链接库与静态链接库比较
- linux编译生成动态链接库与静态链接库
- linux静态链接库与动态链接库详解
- linux静态链接库与动态链接库详解
- linux静态链接库与动态链接库
- Linux静态链接库与动态链接库详解
- linux静态链接库与动态链接库详解
- linux静态链接库与动态链接库详解
- Java中throw和throws的区别
- USACO - 2.2 Runaround Numbers(枚举)
- hdu 3240 卡特兰数+质因数分解+扩展欧几里得求乘法逆元
- NSDate--自学习笔记
- C#调用SQL Server分页存储过程
- Linux 动态链接和静态链接简析(库名与库文件名)
- 全球最杰出的14位程序员
- Android 之 Notification
- 什么是共享经济?
- LightOj 1006(矩阵快速幂)
- Windows 7 搭建FTP
- java获取cpu、内存、硬盘信息
- 《如何欣赏书法》读书笔记(V)
- 编辑器