动态库相关

linux编译链接时搜索库文件的路径:

1. 将库文件拷贝到/lib或/usr/lib目录下,链接器可以找到;

2. 输入链接参数“-Lpathname”,指定库文件所在路径;

运行时搜索库文件的路径:

1) /usr/lib和/lib目录下;

2) 在LD_LIBRARY_PATH环境变量中加上库所在路径;

3) 修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig生效,这样,加入的目录下的所有库文件都可以链接。

链接时可以用“-L”指定查找共享库的路径,用“-lXXX”指定libXXX.so等共享库文件,但在执行文件时,系统仅到默认共享库路径下查找共享库。
不同机型对应的共享库路径不同:
Solaris:LD_LIBRARY_PATH;
AIX:LIBPATH;
HPUX:SHLIB_PATH、 LD_LIBRARY_PATH;(LDD命令可以查看共享库路径)
Digital Unix:LD_LIBRARY_PATH;
Linux: LD_LIBRARY_PATH;
Gcc在搜索路径下,默认优先链接共享库(-Bdynamic),共享库不存在时,链接同名的静态库,优先链接静态库的方法:-Bstatic。

 

gcc生共享库时,使用“-shared”参数就可以了。Linux环境下编译64位动态库时,gcc编译时必须使用-fPIC产生地址无关的代码,ld链接时使用-shared产生动态库文件。如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。

指定与静态库链接:-WI,-Bstatic -lname

指定与共享库链接:-WI,- Bdynamic -lname

链接时搜索库文件的路径:

1. 将库文件拷贝到/lib/usr/lib目录下,链接器可以找到;

2. 输入链接参数“-Lpathname”,指定库文件所在路径;

运行时搜索库文件的路径:

1)  /usr/lib/lib目录下;

2)  LD_LIBRARY_PATH环境变量中加上库所在路径;

3)  修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。这样,加入的目录下的所有库文件都可见。

可重入函数与线程安全函数的理解:

1. 可重入函数-----函数可以被安全的并行执行,输入参数相同时,任何时刻执行结果也相同;函数不涉及全局、静态变量,只使用局部变量。localtime()函数使用一个全局变量保存时间信息,因此是不可重入的;localtime_r()函数只有局部变量保存时间信息,因此是可重入的。

2. 线程安全函数----- 函数可以被多个线程同时调用,访问全局变量时需要使用互斥,确保线程不会相互影响。线程安全说明函数实现上是安全的,不会得到错误结果。

3. 可重入比线程安全要更加严格,可重入函数一定是线程安全的,线程安全函数不一定可重入的。

 

说明:

静态库----Windows:lib文件;unix:a文件。

Unix下产生静态库的命令ar rv libname objfiles

动态库----Windows:dll文件;unix:sl文件、so文件。

Windows的动态库文件与unix的共享库文件差别:

linux的动态库=导入库lib + 动态库dll,因此,unix下使用共享库,仅需要头文件(extern声明)和指定共享库路径,就可以编译链接应用文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值