码迷,mamicode.com
首页 > 其他好文 > 详细

建立静态库和动态库的学习

时间:2020-03-21 23:44:57      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:libs   文件的   保护   inpu   lib   文件处理   swap   测试   动态   

 

在现实的编程生活中,源代码是程序员的智慧的结晶,程序员在项目开发的过程中,为了保证自已拥有的版权,常常需要某些手段把源代码保护起来,而将代码打包成库文件便是其中的手段之一。

库文件主要有两种:静态库和动态库。静态库和动态库的区别是:静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此节省了很多内存。

以下便是我的学习过程:

(1)没有库的实现

技术图片

如图所示,cal .h为头文件,*.c均为源文件,当存在Makefile文件时,使用命令 “make”即可将头文件与源文件连接起来,生成*.o中间文件以及可执行文件。

 

(2)静态库的建立

技术图片

步骤如下:

1.mkdir libSamp  建立一个libSamp目录。

2.ar rcs libLYT.a add.o sub.o swap.o   “libLYT.a”中的lib为库文件的固定前缀,.a为后缀,LYt为自行命名的文件名称;*.o则是除了我们的测试文件对应的.o文件外的所有中间目标文件。

3."cp test.c  cal.h libLYT.a libSamp"    复制测试文件和头文件以及静态库

4."gcc -o test test.c -stastic -L. -lLYT"   gcc指编译器,-o表示指定的目标文件,test指可执行文件,-stastic表示使用静态库,lLYT表示库文件的名称。

5.执行命令“./test”执行可执行文件

 

查看文件大小

技术图片

 

 

 

可以看出:使用静态库文件的可执行文件的大小为958488字节,而未进行库文件处理的可执行文件为8616字节。

此时在静态库文件的可执行文件中,代码就被打包成“乱码”了。

技术图片

(3)动态库的建立

 步骤如下:

1.建立一个libLYT.so  目录

2.将*.o文件,test.c和头文件复制到libLYT.so目录表下

3.gcc -shared -fPIC -o libLYT.so add.o sub.o swap.o生成动态库

4.gcc -o test test.c -L. -lLYT生成可执行文件

5.查看文件大小,对比之下可见,动态库生成的文件比静态库小的多

 技术图片

 

(4)附测试文件test.c

#include<stdio.h>
#include<stdlib.h>

#include "cal.h"

int main(int argc,char **argv)
{
        int a,b;
        printf("please input a,b:\n");
        scanf("%d,%d",&a,&b);

        printf("%d add %d is %d\n",a,b,add(a,b));
        printf("%d sub %d is %d\n",a,b,sub(a,b));
        if(a<b)
        s( a,b);
        else
                printf("%d > %d\n",a,b);
        return 0;
}

 

建立静态库和动态库的学习

标签:libs   文件的   保护   inpu   lib   文件处理   swap   测试   动态   

原文地址:https://www.cnblogs.com/peggyee/p/12542903.html

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