linux static and dynamic library

转自:
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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值