动态库的制作
想要把当前的目录下文件做成动态库
修改makefile
CC := gcc
TARGET := libXXXX.so
SRC := $(wildcard ./*.c)
OBJS := $(patsubst %.c, %.o, $(SRC))
LIBS+= -lpthread -lm
CFLAGS = -O2 -Wall -g -fPIC
all: $(OBJS)
$(CC) -o $(TARGET) $(OBJS) $(LIBS) -shared
%.o:%.c
$(CC) $(CFLAGS) -c $^ -o $@
假如编译报错
which may bind externally can not be used when making a shared object; recompile with -fPIC
注意假如编译报错多半是%.o:%.c 编译的时候没有加pci
不仅仅库连接的时候加pic,他编译的原文件编译成.o的时候也需要加pic
原因就是你用了其他人的库,假如你的文件中没有引用到别人的库文件那么,只需要库在链接的时候加pci也不会报错。注意了
我就是在a.c引用了c库gettimeofday编译成库连接报错,原因a.o编译的时候没有加pic
静态库的制作
vi a.c main.c
gcc -c a.c
ar rcs liba.a a.o
gcc -o main main.c -L. -la 链接库文件
makefile中常用
Makefile代码
$(BIN1): $(BIN1_OBJS)
ar rcs $@ $^
ar x xxx.a 展开.a中的.o文件