背景:
在使用gcc/g++ 编译器编译c/c++ 工程的时候,通常会遇到很多莫名其妙的编译错误(非语法层面的错误),比如使用第三方库的头文件版本不匹配,库的链接顺序不对、函数符号找不到、增加或者去除一些宏定义 等问题。通过适当的使用gcc/g++ 的一些小技巧,可以解决所遇到的问题
1.打印连接库的具体路径
使用-print-file-name选项就可以显示出gcc究竟会连接哪个库了,例如
$ gcc -print-file-name=libc.a
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libc.a
在构建工程的时候,可以在CFLAGS 或者CXXFLAGS 中增加该编译选项,方便查看某个库是否是链接到自己想要的库上面
2.打印头文件搜索路径
当我们的本地电脑存在不同的库或者源码版本的时候,有时候会出现头文件引用错误的情况,可以使用 -v 编译选项,例如
$ gcc -v foo.c
...
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/4.6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
...
3.打印彩色诊断信息
当出现编译出错的时候,我们很多情况下都希望可以在输出的log中快速定位到错误log 所在的位置,可以使用 -fdiagnostics-color=auto 编译选项,同时
export GCC_COLORS