linux 生成和使用动态链接库和静态链接库的Makefile编写

引用

Jesse Reilinux 生成和使用动态链接库和静态链接库的Makefile编写

生成和使用动态链接库和静态链接库的Makefile编写

1. 概述

介绍linux下生成和使用动态链接库和静态链接库的Makefile的编写方法。

 

2. 生成动态链接库的Makefile

首先要有一个c或c++等工具编写出来的库函数文件,也就是里面写了一堆可以被别的函数调用的函数。比如:

 

aaa.cpp

#include <stdio.h>

void pf1(void)

{

    printf(“********/n”);

    return;

}

 

void pf2(void)

{

    printf(“#########/n”);

    return;

}

 

接着要写编译这个函数的Makefile

要把一个文件编译成动态链接库 文件需要分两个步骤

第一步:将这个文件编译成.o文件

CPP=c++

CPPFLAGS=-c

$(CPP) $(CPPFLAGS) aaa.cpp -o aaa.o

这里是编译cpp文件,就用的是C++,如果是编译.c文件,就需要使用gcc

第二步:将这个.o文件链接成动态链接库文件

LD=ld

LIB = libaaa.so

$(LD) -shared -o $(LIB) haspapi.o

动态链接库文件的名字一定要以lib开头,后缀是.so

编译中一定要加上-shared,表示是生成动态链接库

 

3. 生成静态链接库

还是使用上面的文件,编写Makefile

同样也是分两步,第一步和上面一样,我直接拷贝过来

第一步:将这个文件编译成.o文件

CPP=c++

CPPFLAGS=-c

$(CPP) $(CPPFLAGS) aaa.cpp -o aaa.o

这里是编译cpp文件,就用的是C++,如果是编译.c文件,就需要使用gcc

第二步:将这个.o文件链接成静态链接库文件

LIB = libaaa.a

AR=ar

(AR) -r $(LIB) aaa.o

静态链接库文件的后缀是.a,同样也是需要以lib开头

 

4. 链接库的使用

首先需要编写一个使用了链接库文件中函数的c或者c++文件

 

bbb.cpp

extern void pf1(void);

extern void pf2(void);

 

int main(void)

{

    pf1();

    pf2();

    return 0;

}

 

 

使用链接库,Makefile文件如下:

$(CPP) bbb.cpp -I. -L. -o bbb.o -laaa

这里不分是动态的还是静态的,但是,如果使用动态链接库,运行时需要将aaa.so文件拷贝到/usr/lib下,静态库则不需要。

上面的例子是在redhat9上运行测试过的。

 

PS:由于对C++了解甚少,所以直接用c写得c++文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值