静态库:.a 动态库:.so
静态库:ar -r libx.a x.o x.o或(linux用不到)ar -q (只添加,不检查重复性) +ranlib(更新索引)。ar的其它参数:d,删除模块;p,显示/打印模块;x,释放出模块;v,更多显示信息;t,显示其中的文件。
显示.o或.so中等目标文件中的symbols:nm
显示程序使用的动态库:ldd
显示.o, .a, .so中的信息:objdump
共享库配置文件:/etc/ld.so.conf。修改:ldconfig
gcc编译选项:-fpic 链接选项:-shared
安装:install -d 目录名
和,install 源 目的
另,选项 -m 三或四位数字表示的权限
运行时,动态库按序在以下位置查找:
LD_LIBRARY_PATH
由ldconfig生成的/etc/ld.so.cache (edit /etc/ld.so.conf and then running ldconfig. this is the preferred location)
/lib
/usr/lib
Shared Library Search Paths: http://www.eyrie.org/~eagle/notes/rpath.html
在程序中动态加载动态库(库文件名如果不是绝对路径,则库文件在上面位置及当前目录查找):
#include
……
void *文件指针 = dlopen("库文件名", 加载选项); /* 加载。加载选项可以为立刻载入所有函数RTLD_NOW或取得函数指针时再载入函数RTLD_LAZY;二者可以与RTLD_GLOBAL进行或操作,表示其它动态库可以引用这个库。 */
if (NULL == (char *错误字符串 = dlerror())) /* 检查上一动态库操作的错误字符串 */
{
函数返回值 (*函数指针)(函数参数表);
函数指针 = dlsym(文件指针, "函数名"); /* 取得函数指针 */
dlclose(文件指针); /* 关闭 */
}
链接选项:-ldl
removing unused debugging information from object files: strip