基础知识回归总结整理GNU编译工具GCC支持多种编程语言支持多种平台构建Build过程查看版本文件后缀编译单个源程序编译多个源程序预处理指令头文件的三种定位方式
~~~~~~~~~~~~~~~
C、C++、Objective-C、java、Fortran、Pascal、Ada
~~~~~~~~~~~
Unix、linux、Windows。
~~~~~~~~~~~~~~
编辑 -> 预编译 -> 编译 -> 汇编 -> 链接
1) 编辑: vi hello.c -> hello.c 2) 预编译:gcc -E hello.c -o hello.i -> hello.i -+ 3) 编译: gcc -S hello.i -> hello.s | GCC 4) 汇编: gcc -c hello.s -> hello.o | 工具链 5) 链接: gcc hello.o -o hello -> hello -+
范例:hello.c
~~~~~~~
gcc -v
~~~~~~~
.h - C语言源代码头文件 .c - 预处理前的C语言源代码文件 .i - 预处理后的C语言源代码文件 .s - 汇编语言文件 .o - 目标文件 .a - 静态库文件 .so - 共享库(动态库)文件
~~~~~~~~~~~~~
gcc [选项参数] 文件
-c - 只编译不链接。 -o - 指定输出文件。 -E - 预编译。 -S - 产生汇编文件。 -pedantic - 对不符合ANSI/ISO C语言标准的 扩展语法产生警告。 -Wall - 产生尽可能多的警告。 范例:gcc -Wall wall.c -Werror - 将警告作为错误处理。 范例:gcc -Werror werror.c -x - 指定源代码的语言。 范例:gcc -x c++ cpp.c -lstdc++ -g - 生成调试信息。 -O1/O2/O3 - 优化等级。
~~~~~~~~~~~~~
gcc [选项参数] 文件1 文件2 …
思考:头文件的作用是什么?
1) 声明外部变量、函数和类。 2) 定义宏、类型别名和自定义类型。 3) 包含其它头文件。 4) 借助头文件卫士,防止因同一个头文件被多次包含, 而引发重定义错。
包含头文件时需要注意:
1) gcc的-I选项
指定头文件附加搜索路径。
2) #include <…>
先找-I指定的目录,再找系统目录。
3) #include “…”
先找-I指定的目录,再找当前目录,最后找系统目录。
4) 头文件的系统目录
/usr/include /usr/local/include /usr/lib/gcc/i686-linux-gnu/4.6.3/include /usr/include/c++/4.6.3 (C++编译器优先查找此目录)
~~~~~~~~~
C_INCLUDE_PATH - C头文件的附加搜索路径, 相当于gcc的-I选项。 CPATH - 同C_INCLUDE_PATH。 CPLUS_INCLUDE_PATH - C++头文件的附加搜索路径。 LIBRARY_PATH - 链接时查找静态库/共享库的路径。 LD_LIBRARY_PATH - 运行时查找共享库的路径。
通过gcc的-I选项指定C/C++头文件的附加搜索路径:
# gcc calc.c cpath.c -I.将当前目录作为C头文件附加搜索路径, 添加到CPATH环境变量中:
# export CPATH=$CPATH:. // export保证当前shell的 // 子进程继承此环境变量# echo $CPATH# env | grep CPATH也可以在~/.bashrc或~/.bash_profile 配置文件中写环境变量,持久有效:
export CPATH=$CPATH:.执行# source ~/.bashrc或# source ~/.bash_profile生效。以后每次登录自动生效。1) #include “目录/xxx.h” - 头文件路径发生变化, 需要修改源程序。 2) C_INCLUDE_PATH/CPATH=目录 - 同时构建多个工程, 可能引发冲突。 3) gcc -I目录 - 既不用改程序, 也不会有冲突。
新闻热点
疑难解答
图片精选