Linux应用编程---库制作

动态库的制作

想要把当前的目录下文件做成动态库

修改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文件

Guess you like

Origin blog.csdn.net/weixin_41884251/article/details/111300653