0.链接
1.gcc参数的简单介绍
-S 生成会标代码
Redis-6.0.8中遇到的一些编译参数:
-fpic 如果支持这种目标机, 编译器就生成位置无关目标码.适用于共享库 (shared library).
-fPIC 如果支持这种目标机, 编译器就输出位置无关目标码.适用于动态连接 (dynamic linking),
即使分支需要大范围转移.
-pedantic 以ANSI/ISO C标准列出的所有警告,当GCC在编译不符合ANSI/ISOC语言标准的源代码时,如果在编
译指令中加上了-pedantic选项,那么源程序中使用了扩展语法的地方将产生相应的警告信息。
--Werror 视警告为错误;出现任何警告即放弃编译.
-Wall 会打开一些很有用的警告选项,建议编译时加此选项。
-Wextra 打印一些额外的警告信息。
-w 禁止显示所有警告信息。
1.内存非法访问检查
2.参数-E
-E 预处理 后 即停止, 不进行 编译. 预处理后的 代码 送往 标准输出.
GCC 忽略 任何 不需要 预处理 的 输入文件.
3.参数 -I(大写的i),-L(大写的l),-l(小写的L)
-L 后面紧跟着用户设定的编译器【库文件】查找路径,如:-L /usr/local/lib
-I 后面紧跟着用户设定的编译器【头文件】查找路径,如: -I${MYSQL_HOME}/include/mysql
-l 用来指明编译器要链接哪些【库】,如: -lpcre -lssh
整体举例:
CC=g++
CFLAGS=-g
BIN=main
OBJS=main.o
LIBS=-I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient -ljsoncpp -lpthread -std=c++11
$(BIN):$(OBJS)
$(CC) $(CFLAGS) $^ -o $@
%.o:%.cpp
$(CC) $(CFLAGS) -c $< -o $@ $(LIBS)
.PHONY:clean
clean:
rm -f *.o $(BIN)
4. -fpermissive
gcc文档说明:
Downgrade some diagnostics about nonconformant code from errors to warn-
ings. Thus, using ‘-fpermissive’ allows some nonconforming code to compile.
一旦使用这个选项,可以兼容一些老的语法,但是一些语法错误也会被忽略,可能会导致更严重的问题.