gcc对文件的处理需要经过预处理->编译->汇编->链接的步骤,从而产生一个可执行文件,各部分对应不同的文件类型,具体如下:file.c c程序源文件file.i c程序预处理后文件file.cxx c++程序源文件,也可以是file.cc / file.cpp / file.c++file.ii c++程序预处理后文件file.h c/c++头文件file.s 汇编程序文件file.o 目标代码文件
以下是从某些博客中摘录的使用例子:http://hi.baidu.com/eng_cheng/blog/item/37c2f3aee20a79c47dd92ab2.html1.编译单个文件vi hello.c //创建源文件hello.cgcc -o hello hello.c //编译为可执行文件hello,在默认情况下产生的可执行文件名为a.out./hello //执行文件,如果只写hello是错误的,因为系统会将hello当指令来执行,然后报错2.编译多个源文件vi message.cgcc -c message.c //输出message.o文件,是一个已编译的目标代码文件vi main.cgcc -c main.c //输出main.o文件gcc -o all main.o message.o //执行连接阶段的工作,然后生成all可执行文件./all注意:gcc对如何将多个源文件编译成一个可执行文件有内置的规则,所以前面的多个单独步骤可以简化为一个命令。vi message.cvi main.cgcc -o all message.c main.c./all3.使用外部函数库GCC常常与包含标准例程的外部软件库结合使用,几乎每一个linux应用程序都依赖于GNU C函数库GLIBC。vi trig.cgcc -o trig -lm trig.cGCC的-lm选项,告诉GCC查看系统提供的数学库libm。函数库一般会位于目录/lib或者/usr/lib中。4.共享函数库和静态函数库静态函数库:每次当应用程序和静态连接的函数库一起编译时,任何引用的库函数的代码都会被直接包含进最终二进制程序。共享函数库:包含每个库函数的单一全局版本,它在所有应用程序之间共享。vi message.cvi hello.cgcc -c hello.cgcc -fPIC -c message.cgcc -shared -o libmessge.so message.o其中,PIC命令行标记告诉GCC产生的代码不要包含对函数和变量具体内存位置的引用,这是因为现在还无法知道使用该消息代码的应用程序会将它链接到哪一段地址空间。这样编译输出的文件message.o可以被用于建立共享函数库。-shared标记将某目标代码文件变换成共享函数库文件。gcc -o all -lmessage -L. hello.o-lmessage标记来告诉GCC在连接阶段使用共享数据库libmessage.so,-L.标记告诉GCC函数库可能在当前目录中,首先查找当前目录,否则GCC连接器只会查找系统函数库目录,在本例情况下,就找不到可用的函数库了。