静态库和动态库
静态库
后缀为.a xxx的库一般命名为libxxx.a
调用这个库时,库函数的代码被编译进目标代码
生成库的命令为:
ar -r libtest.a test_1.o
编译时直接在后面加上库文件名,在目标源文件中加库文件的头文件
gcc -o test main.c libtest.a
动态库
又叫共享库,后缀为.so
编译时不会被编译进目标代码,执行时被调用
编译生成libtest.so库文件:
gcc test_a.c test_b.c -fPIC -shared -o libtest.so
使用库文件:
gcc test.c -L../ -ltest -o test
-L后接库文件所在路径
【tips】
使用动态库要在环境变量中加入动态库.so文件所在路径
Makefile
TARGET=lib_api.so
# Common flags
CXXFLAGS += -W -Wall -Wno-unused-parameter
SRC = test_lib.cc \
request.cc
CXXFLAGS += -I ../base/ -I ../
LDFLAGS += -lmosquitto -pthread
OBJS=$(SRC:.cc=.o)
all:${TARGET}
${TARGET}:${OBJS}
${CXX} -o $@ $^ ${LDFLAGS} -shared -fPIC
.PHONY:clean
clean:
rm -f ${TARGET}
find . -name '*.o' -exec rm -rf {} \;