封装的dll 都需要有相应的释放内存的函数。
制作dll_declspec(dllexport): .h .c 都需要添加
给提供外部的接口上面加上:dll_declspec(dllexport):
gcc -c test.c -o test.o -fPIC (生成与位置无关的代码)
gcc -shared -o lib库名.so test.o test1.o ---> lib库.so
L 指定路径 -l库名
src/ obj/ inc/ lib/ media/ makefile
ldd a.out ===>not found
1 加入c库
2 指定目录 ~/.bash_profile
目标:依赖
a.out:xx.c,xx.c,xx.c
gcc xx.c xx.c xx.c -c
2 指定目录 ~/.bash_profile
目标:依赖
a.out:xx.c,xx.c,xx.c
gcc xx.c xx.c xx.c -c
#src = xx.c xx.c xx.c
src = #(wildcard *.c) 取出所有的.c文件名 组成字符串src
src = #(wildcard *.c) 取出所有的.c文件名 组成字符串src
#obj = xx.o xx.o xx.o
obj = $(patsubst %.c, %.o, $(src)) 把src中包含的.c文件转化成.o文件
obj = $(patsubst %.c, %.o, $(src)) 把src中包含的.c文件转化成.o文件
ALL: a.out
a.out:$(obj)
自动变量
$@: 标识目标
$^ 所有依赖关系
$<: 标识第一个依赖关系, 在模式规则,会将条件依次取出
目标:依赖
%.o:%.c
gcc -c $< -o $@
src = $(wildcard ./src/*.c) 函数wildcard 参数1 表达式 返回文件名字符串
obj = $(patsubst ./src/%.c ./obj/%.o $(src)) patsubst函数 参数1 要替换的文件名 参数2 要替换为文件名 参数3
obj = $(patsubst ./src/%.c ./obj/%.o $(src)) patsubst函数 参数1 要替换的文件名 参数2 要替换为文件名 参数3
target = app
inc_path = ./inc
ALL:$(target)
$(target):$(obj):
gcc $^ -o $@
$(obj): ./obj/%.o : ./src/%.c
gcc -c $< -o $@ -I $(inc_path)
clean:
-rm -rf $(obj) $(target)
$(target):$(obj):
gcc $^ -o $@
$(obj): ./obj/%.o : ./src/%.c
gcc -c $< -o $@ -I $(inc_path)
clean:
-rm -rf $(obj) $(target)
.PHONY: clean ALL