yyxl的ChinaUnix博客yyyw.blog.chinaunix.net
yyxl
全部博文(1805)
display(4)
display(7)
oops(7)
2017年(19)
2016年(80)
2015年(341)
2014年(438)
2013年(349)
2012年(332)
2011年(248)
marion
n73man00
HuangLei
wangchen
commshar
gongping
wowuchi
crowsy00
大鬼不动
lkfei
pengsl20
Yan999
cadssaa
13814089
llst008
haha625
Liyan15
firo
分类:
2011-09-29 08:35:12
原文地址:Linux中如何创建静态库和动态库 作者:wpneu
函数库分为静态库和动态库两种。
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
程序1: hello.h
#ifndef HELLO_H #define HELLO_H void hello(const char *name); #endif //HELLO_H
程序2: hello.c
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为myhello,则静态库文件名就是libmyhello.a。
# gcc -o hello main.c -L. -lmyhello
# ./hello
Hello everyone!
删除静态库文件运行./hello,程序正常运行,说明静态库公用函数已经链接到目标文件。
动态库文件扩展名为.so。
# gcc -shared -fPCI -o libmyhello.so hello.o
./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory
哦!出错了。快看看错误提示,原来是找不到动态库文件libmyhello.so。程序在 运行时,会在/usr/lib和/lib等目录中查找需要的动态库文件。若找到,则载入动态库,否则将提示类似上述错误而终止程序运行。
如何找到生成的动态库有3种方式:
1)把库拷贝到/usr/lib和/lib目录下。
(2)在LD_LIBRARY_PATH环境变量中加上库所在路径。
例如动态库libhello.so在/home/example/lib目录下:
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/example/lib
(3) 修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。这样,加入的目录下的所有库文件都可见。
当静态库和动态库同名时, gcc命令将优先使用动态库。
上一篇:makefile 自动生成头文件依赖
下一篇:linux 库的理解
登录 注册