当前位置:首页 > 操作系统 > Linux

linux下库文件的实现

 


一丶首先编辑测试文件。

main.c

             1 #include<stdio.h>
 2 #include"head.h" 3 4 5int main(int argc, char *argv[])
 6{
 7int a[10]={
 8                  -26,2,3,77,12,88,0,-8,99,100 9         };
10int i=0;
11          sort(a,10);
12for(i=0;i<10;i++)
13         {
14                  printf("%d n",a[i]);
15         }
16return0;
17 }

 sort.c

             1
            void sort(int *a,int len)
 2{
 3int i=0;
 4int j;
 5int t;
 6for(i=0;i<len;i++)
 7        {
 8for(j=0;j<len-i-1;j++)
 9                 {
10if(a[j]>a[j+1])
11                         {
12                                  t=a[j];
13                                  a[j]=a[j+1];
14                                  a[j+1]=t;
15                         }
16                 }
17        }
18 }

 head.h

            1
            #ifndef head_h

            2
            #define head_h
345void sort(int *a,int len);
67#endif8

 二丶我们在这里做一个附加的Makefile文件。(用Makefile编译)

Makefile

OBJ=main.o sort.o
main:$(OBJ) head.h
        gcc -o main $(OBJ)
main.o:main.c
sort.o:sort.c

.PHONY:cleaA clean
cleanA:
        rm main $(OBJ)
clean:
        rm $(OBJ)

 接下来执行指令:make

会有如下结果生成.o文件

cc    -c -o main.o main.c
cc    -c -o sort.o sort.c
gcc -o main main.o sort.o

执行结果为

 zhanghongle  ~  test  ./main
-26
-802312778899100

 执行命令:ls -l

可查看各个文件的大小

-rw-r--r-- 1 root        root         147 Mar 2202:48 Makefile
-rw-r--r-- 1 root        root          67 Mar 2202:32 head.h
drwxr-xr-x 1 root        root         512 Mar 2202:59 libzhl
-rwxrwxrwx 1 zhanghongle zhanghongle 8416 Mar 2205:17 main
-rw-r--r-- 1 root        root         215 Mar 2202:36 main.c
-rw-rw-rw- 1 zhanghongle zhanghongle 1824 Mar 2205:17 main.o
-rw-r--r-- 1 root        root         196 Mar 2202:32 sort.c
-rw-rw-rw- 1 zhanghongle zhanghongle 1448 Mar 2205:17 sort.o

三丶静态库的实现

首先生成静态库

执行指令:ar rcs libzhl.a sort.o

使用静态库编译

执行指令:gcc -o main main.c -static -L. -lzhl

执行命令:./main

 结果为

 zhanghongle  ~  test  cd libzhl
 zhanghongle  ~  test  libzhl  ls
head.h  libzhl.a  main  main.c
 zhanghongle  ~  test  libzhl  ./main
-26
-802312778899100

 同时重复执行:ls -l

文件大小一对比能明显反应静态库的特点

-rw-r--r-- 1 root root     67 Mar 2202:58 head.h
-rw-r--r-- 1 root root   3482 Mar 2202:58 libzhl.a
-rwxr-xr-x 1 root root 844792 Mar 2202:59 main
-rw-r--r-- 1 root root    215 Mar 2202:58 main.c

四丶动态库的实现

首先生成动态库

执行指令:gcc -shared -fPIC -o libzhl.so sort.o

使用静态库编译

执行指令:gcc -o main main.c -L. -lzhl(编译方式类似于静态库)

同样观察文件大小也能看出动态库的特点

-rw-r--r-- 1 root        root         147 Mar 2202:48 Makefile
-rw-r--r-- 1 root        root          67 Mar 2202:32 head.h
drwxr-xr-x 1 root        root         512 Mar 2202:59 libzhl
-rwxrwxrwx 1 zhanghongle zhanghongle 7432 Mar 2211:27 libzhl.so
-rwxrwxrwx 1 zhanghongle zhanghongle 8416 Mar 2211:27 main
-rw-r--r-- 1 root        root         215 Mar 2202:36 main.c
-rw-rw-rw- 1 zhanghongle zhanghongle 1824 Mar 2211:27 main.o
-rw-r--r-- 1 root        root         196 Mar 2202:32 sort.c
-rw-rw-rw- 1 zhanghongle zhanghongle 1448 Mar 2211:27 sort.o

 

原文:https://www.cnblogs.com/hongle31/p/12544687.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐