您的位置:首页 > 运维架构 > Linux

Linux环境下动态库和静态库的创建和引用

2016-07-30 01:16 288 查看
一、创建库文件:

编辑头文件(.h)和源文件(.c;.cxx)。

生成目标文件:

$gcc -c <src_fname_list> -o <fname_obj>

生成静态库文件:

$ar cr lib<fname>.lib obj_fname_list

例如:

$ar cr libmymath.a mymath1.o mymath2.o

生成动态库文件:

$gcc -shared -fPIC -o lib<fname>.so <obj_fname_list>

例如:

$gcc -shared -fPIC -o libmymath.so mymath1.o mymath2.o

//----

二、指定库文件的搜索路径:

动态库的搜索次序:gcc命令指定,环境变量LD_LIBRARY_PATH指定,

配置文件/etc/ld.so.conf内指定(/etc/ld.so.cache),默认的/usr/lib,默认的/usr/local/lib。

gcc命令指定的方法:-L <dir> -l<lib_base_name>。

环境变量LD_LIBRARY_PATH指定的方法(若指定多个目录,可用冒号间隔):

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<dir_name>

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<dir_name1>:<dir_name2>....

例如:

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux2014/MyLib

配置文件/etc/ld.so.conf内指定的方法:编辑此文件,将库文件的搜索路径加到文件末尾,在终端执行ldconfig命令。

静态库的搜索次序:gcc命令指定,环境变量LIBRARY_PATH指定,

默认的/lib,默认的/usr/lib。

//---

三、引用方法:

$gcc <obj_fname_list> -o <exe_fname> -L <dir> -l<lib_base_name>

或:

$gcc -L <dir> -l<lib_base_name> <obj_fname_list> -o <exe_fname>

优先引用动态库。

//----

四、添加动态库文件到指定目录的方法:

(1)、若将.so文件加入到默认的/usr/lib,或/usr/local/lib目录下,在终端执行ldconfig命令。

(2)、若将.so文件加入到其他目录下,需将库目录写入共享库配置文件/etc/ld.so.conf内。示例如下:

#cat /etc/ld.so.conf

#echo "/home/linux2014/MyLib" >> /etc/ld.so.conf

#ldconfig

(3)、export LD_LIBRARY_PATH,是临时指定。

(4)、向/etc/ld.so.cache内添加动态库文件搜索路径的方法:

#ldcofig <dir_name>//刷新/etc/ld.so.cache

或:先写入文件/etc/ld.so.conf内,再执行ldconfig刷新:

#echo "<dir_name>" >> /etc/ld.so.conf

#ldconfig
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: