码迷,mamicode.com
首页 > 系统相关 > 详细

Linux库函数制作(静态库、动态库)

时间:2017-09-28 16:44:47      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:添加   分享   strong   目录   路径   std   author   linu   printf   

Linux库函数制作(静态库、动态库)

 

静态库与动态库

 

链接方式

链接分为两种:静态链接、动态链接

 

静态链接:

由链接器在链接时将库的内容加入到可执行程序中

静态链接的特点是:

优点:

    对运行环境的依赖性较小,具有较好的兼容性

缺点:

    生成的程序比较大,需要更多的系统资源,在装入内存时会消耗更多的时间

    库函数有了更新,必须重新编译应用程序

 

 

动态链接:

连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序

动态链接的特点:

优点:

    在需要的时候才会调入对应的资源函数

    简化程序的升级;有着较小的程序体积

    实现进程之间的资源共享(避免重复拷贝)

缺点:

    依赖动态库,不能独立运行

    动态库依赖版本问题严重

 

/*************************************************************************
> File Name: myprintf.c
> Author: lsgxeva
> Mail: lsgxeva@163.com
> Created Time: 2017年09月28日 星期四 11时52分57秒
************************************************************************/

#include <stdio.h>

void myprintf(void)
{
    printf("hello, world!\n");
}

 

/*************************************************************************
> File Name: myprintf.h
> Author: lsgxeva
> Mail: lsgxeva@163.com
> Created Time: 2017年09月28日 星期四 11时53分15秒
************************************************************************/

#ifndef _MYPRINTF_H_
#define _MYPRINTF_H_

extern void myprintf(void);

#endif // _MYPRINTF_H_

 

/*************************************************************************
> File Name: mytest.c
> Author: lsgxeva
> Mail: lsgxeva@163.com
> Created Time: 2017年09月28日 星期四 11时54分26秒
************************************************************************/

#include "myprintf.h"

int main()
{
    myprintf();
    return 0;
}

 

目录结构

drwxr-xr-x 5 root root 94 9月 28 12:22 .
drwxr-xr-x 5 root root 54 9月 28 11:08 ..
-rw-r--r-- 1 root root 360 9月 28 11:53 myprintf.c
-rw-r--r-- 1 root root 380 9月 28 11:54 myprintf.h
-rw-r--r-- 1 root root 351 9月 28 12:22 mytest.c
drwxr-xr-x 2 root root 6 9月 28 12:24 output
drwxr-xr-x 2 root root 6 9月 28 11:56 shared
drwxr-xr-x 2 root root 6 9月 28 12:23 static

 

制作静态链接库

 

技术分享

 

技术分享

 

 技术分享

 

 

 制作动态链接库

 

技术分享

 

技术分享

 

解决无法打开动态库的常用简便方法:
声明临时变量环境
export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH

或者修改 /etc/ld.so.conf 文件 在其中添加库的搜索路径,一行一个路径。
sudo ldconfig 更新 /etc/ld.so.cache 文件
那 ./etc/ld.so.conf 中所有路径的库文件都被缓存达到 /etc/ld.so.cache 中。

 

技术分享

注意: 将生成共享库的编译参数-shared错误地用于生成可执行文件,将导致程序运行时发生段错误!

 

 

编译产生动态链接库,并支持 major 和 minor 版本号。

 

技术分享

 

 技术分享

 

 

动态链接和静态链接时,可执行文件的区别:

 

 技术分享

 

Linux库函数制作(静态库、动态库)

标签:添加   分享   strong   目录   路径   std   author   linu   printf   

原文地址:http://www.cnblogs.com/lsgxeva/p/7607108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!