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

  1. 自己制作静态链接库
    首先使用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 -c
 ar -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 func1
00000014 T func2
         U puts
  1. 制作动态链接库
    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:(动态库的决定路径)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值