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声明)和指定共享库路径,就可以编译链接应用文件。