Linux学习笔记——例说makefile 增加自定义共享库
#ifndef __LIBTEST_H #define __LIBTEST_H int sub(int a, int b); int add(int a, int b); #endif
int add(int a, int b) { return a+b; }
int sub(int a, int b) { return a-b; }
# 指令编译器和选项 CC = gcc CFLAGS = -Wall -std=gnu99 # 目标文件 TARGET = libtest.so # C文件 SRCS = test-add.c test-sub.c # 目标文件 OBJS = $(SRCS:.c=.o) # 链接为可执行文件 $(TARGET):$(OBJS) [tab]$(CC) -shared -o $@ $^ [tab]mv $(TARGET) ../lib clean: [tab]rm -rf $(TARGET) $(OBJS) # 编译规则 $@代表目标文件 $< 代表第一个依赖文件 %.o:%.c [tab]$(CC) $(CFLAGS) -o $@ -fPIC -c $<
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffe55b18000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffe55750000)
gcc -Wall -std=gnu99 -o test-add.o -fPIC -c test-add.c
gcc -Wall -std=gnu99 -o test-sub.o -fPIC -c test-sub.c
gcc -shared -o libtest.so test-add.o test-sub.o
mv libtest.so ../lib
#include <stdio.h> #include <libtest.h> int main(void) { int a = 3; int b = 2; printf("a=%d\n", a); printf("b=%d\n", b); printf("a+b=%d\n", add(a, b)); printf("a-b=%d\n", sub(a, b)); return 0; }
# 指令编译器和选项 CC = gcc CFLAGS = -Wall -std=gnu99 # 目标文件 TARGET = test # C文件 SRCS = test.c # 头文件查找路径 INC = -I. # 库文件和库查找路径 DLIBS = -ltest LDFLAGS = -L./lib # 指定运行时的库文件路径 RPATH = -Wl,-rpath=./lib # 目标文件 OBJS = $(SRCS:.c=.o) # 链接为可执行文件 $(TARGET):$(OBJS) [tab]$(CC) -o $@ $^ $(LDFLAGS) $(DLIBS) $(RPATH) clean: [tab]rm -rf $(TARGET) $(OBJS) # 连续动作,请清除再编译链接,最后执行 exec:clean $(TARGET) [tab]@echo 开始执行 [tab]./$(TARGET) [tab]@echo 执行结束 # 编译规则 $@代表目标文件 $< 代表第一个依赖文件 %.o:%.c [tab]$(CC) $(CFLAGS) $(INC) -o $@ -c $<
gcc -Wall -std=gnu99 -I./lib -o test.o -c test.c
gcc -o test test.o -L./lib -ltest -Wl,-rpath=./lib
a=3
b=2
a+b=5
a-b=1
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。