1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 制作静态链接库和动态链接库

制作静态链接库和动态链接库

时间:2018-06-06 09:38:49

相关推荐

制作静态链接库和动态链接库

自己制作静态链接库

首先使用gcc -c只编译不连接,生成.o文件,然后使用ar工具进行打包成.a归档文件。

1.1 建立一个源文件和头文件

.C文件:

#include <stdio.h>void func1(void){printf("run staticlib.\n");}int func2(int a, int b){return a+b;}

.h文件

void func1(void);int func2(int a, int b);

1.2 制作一个Makefile

all:gcc kanggo.c -o kanggo.o -car -rc libkanggo.a kanggo.o

这里的-c代表只编译不连接。ar工具进行打包.a归档文件,-rc是创建的意思(连接kanggo.o创建libkanggo.a)

1.3 使用静态链接库

把libkanggo.a 和kanggo.h都放到引用的文件件下,然后建立一个test.c文件,文件中包含库的kanggo.h,然后直接使用库函数。

编译方法: gcc test.c -o test -lkanggo -L.

注:-lkanggo表示连接到此库。

-L.表示当前路径

运行结果:

run staticlib.

func2 = 10.

1.4 nm命令的使用

除了ar命令外,还有个nm命令也很有用,它可以用来查看一个.a文件中都有哪些符号。

比如执行: nm kanggo.a

运行结构:

kanggo.o:00000000 T func100000014 T func2U puts

制作动态链接库

2.1 动态链接库后缀是.so(对应windows系统的dll),静态库的扩展名是.a。

2.2 第一步 创建一个动态链接库

gcc kanggo.c -o kanggo.o -c -fPIC

gcc -o kanggo.so kanggo.o -shaerd

-fPIC是位置无关码,-shared是按照共享库的方式来链接。

注意:发布的时候,只有libxxx.so和xxx.h即可。

2.3 第二步:使用自己创建的共享库

编译方法:

gcc test.c -o test -lkanggo -L.

但是在执行的时候会提示找不到库。

解决办法一: 将libkang.so放到固定目录下。

这个固定目录在/usr/lib目录下。

解决办法二:使用环境变量:LD_LIBRARY

命令:export LD_LIBRARY_PATH:(动态库的决定路径)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。