转自:
static library
https://www.geeksforgeeks.org/static-vs-dynamic-libraries/
dynamic library
https://www.geeksforgeeks.org/static-vs-dynamic-libraries/
https://www.geeksforgeeks.org/working-with-shared-libraries-set-2/
my test code
ps: I can’t run dynamic exe_d , as i can not change the evironment varaible LD_LIBRARY_PATCH
main_dir
- main.c
- Makefile (marked as Makefile_main)
- lib
–help.c
–help.h
–mem.c
–mem.h
–Makefile (marked as Makefile_lib)
Makefile_main
objs := $(wildcard *.c)
lib_s := staticlib
lib_d := dynamiclib
include_path = -I./lib
all:use_static_lib use_dynamic_lib
use_static_lib: $(objs)
cc -g -o exe_s $(objs) $(include_path) -L./lib/ -l$(lib_s)
use_dynamic_lib: $(objs)
export LD_LIBRARY_PATH
LD_LIBRARY_PATH=/worktmp/codebase/test/gnu_lib_test/lib:$(LD_LIBRARY_PATH) # ==no effect==
cc -g -o exe_d $(objs) $(include_path) -L./lib/ -l$(lib_d)
@echo $(LD_LIBRARY_PATH)
Makefile_lib
objs = $(patsubst %.c,%.o,$(wildcard *.c))
objs_PIC = $(objs:.o=.pic)
all:static_lib dynamic_lib
static_lib:$(objs)
ar crs libstaticlib.a $(objs)
dynamic_lib:$(objs_PIC)
cc -g -shared -fPIC -o libdynamiclib.so $(objs_PIC)
%.pic:%.c #for compile PIC object for dynamic library
cc -g -c $^ -o $@ -fPIC
clean:;rm *.o
main.c
#include "help.h"
#include "mem.h"
int main()
{
help();
mem();
}