1,phtread库不是inux默认的系统库,因此源码中编写pthread_create(),pthread_atfork(),在编译的时候都不需要人为的进行连接该库
gcc -o thread thread.c -lpthread
这里类似利用math.h中的pow函数一样,需要我们-lm
2,关于linux中利用c连接mysql数据库,
头文件需要包含#include"/usr/inlcude/mysql/mysql.h"
先编译:gcc -c main.c (生成目标文件)
在最后进行连接的时候gcc main.o -o main -L/usr/lib/mysql -lmysqlclient ( -L 指定libmysql.a,libmysql.so的库路径 -l表示链接这两个库)
ped: 如果需要Makefile中导入其他Makefile,可以include XXX,这里的XXX一般我们最好填写绝对路径。如果这里要同时引入几个,它们之间要用空格分开
否则,make命令进行执行的时候,会在当前目录寻找,而后会在make -I 路径 这个我们执行的路径中寻找。
如果想要include就算找不到路径也继续执行,不妨在include 前面添加-
3看一makefile例子
CC = gcc
TARGET = Server
RM = rm -f
OBJS = strategy.o thread.o Server.o
LIB_PATH = -lpthread -L/usr/lib/mysql/libmysql -lmysqlclient
CFLAGS = -I/usr/include/mysql -g
$(TARGET):$(OBJS)
$(CC) -o $(TARGET) $(OBJS) $(LIB_PATH)
$(OBJS):%.o:%.c
$(CC) -c $(CFLAGS) $< -o $@
clean:
-$(RM) $(TARGET) $(OBJS)
分析下相关语句: $(OBJS):%.o:%.c 此句表示将$(OBJS)中的.o的后缀文本替换为.c的后缀,即成为strategy.c thread.c Server.c
$< 表示依赖项的结果,即表示$(OBJS):%.o:%.c 执行完后的结果,等价为strateg.c thread.c Server.c
$@表示$(OBJS)
-$(RM) $(TARGET) $(OBJS) 前面必须为tab,-表示即使执行出现错误也要继续执行下去
关于makefile文本的制作,是自顶向下的顺序制作的。先是连用-o 连接各大目标文件,库文件
下面才开始进行-c -g进行源文件的编译 调式选项。此为编译阶段
最后的clean: 表示清空.o 执行文件。