linux下编译动态及静态库

来源:互联网 发布:彻底卸载kingroot软件 编辑:程序博客网 时间:2024/05/01 21:25

写一个简单的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
原创粉丝点击