linux下编译动态及静态库

写一个简单的C程序

test.h

#ifndef _TEST_H_
#define _TEST_H_

#include <stdio.h>

void func1();
void func2();

#endif


test.c

#include "test.h"

void func1(){
    printf("Haha,Func1!\n");
}

void func2(){
    printf("Haha,Func2!\n");
}

/*
void main(){
func1();
func2();
return ;
}*/

书写Makefile

GC=gcc


LD=ld
AR=ar
RM=rm -f

CFLAGS=-c
OBJ=test.o
TARGET_STD=libtest.a
TARFET_DLL=libtest.so
TARGET=test

%o:%c
    $(GC) $(CFLAGS) $^ -o $(OBJ)#生存.o目标
    $(RM) $(TARGET_STD) $(TARGET_DLL) $(TARGET)#清空之前生成目标文件

#test:$(TARGET)
#$(TARGET):$(OBJ)
#    $(GC) -o $(TARGET) $(OBJ)#生成可执行目标

build:$(TARGET_STD)
$(TARGET_STD):$(OBJ)
    $(AR) -r $(TARGET_STD) $(OBJ)#生成静态库

dll:$(TARFET_DLL)
$(TARFET_DLL):$(OBJ)
    $(LD) -shared -o $(TARFET_DLL) $(OBJ)#生成动态库

clean:
    $(RM) $(OBJ) $(TARGET_STD) $(TARGET_DLL) $(TARGET)#清空生成文件


执行make或make test生成test可执行文件

执行make build生成静态库

执行make dll生成动态库

执行make clean清空


2使用库文件

编写文件main.c

#include "./Test/test.h"//调用头文件,可以不加

void main(){
    func1();
    func2();
    return ;
}

书写makefile

使用静态库

GC=gcc

main.o:main.c
    $(GC) -o main.o -c main.c -I./Test -L./Test -ltest -static #libtest.a放在路径下
        #加上-c生成的是中间文件

build:main
main:main.o
    $(GC) -o main  main.o -I./Test -L./Test -ltest -static
    #由中间文件生成目标文件 ,-I可以不带,调试也没问题

clean:
    rm -r main.o main

使用动态库,首先将libtest.so拷贝至/usr/lib -L./Test---->-L.仍需指明lib路径

gcc -o main main.c -L./Test -ltest


*gcc -o ... -c ...加上-c生成目标文件为中间文件









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值