Compiling C:修订间差异
来自Ubuntu中文
跳到导航跳到搜索
Dbzhang800(留言 | 贡献) 小无编辑摘要 |
Dbzhang800(留言 | 贡献) 小无编辑摘要 |
||
第1行: | 第1行: | ||
{{TOCright}} | |||
== C 编程中相关文件后缀 == | == C 编程中相关文件后缀 == | ||
第11行: | 第12行: | ||
int main(int argc,char *argv[]) | int main(int argc,char *argv[]) | ||
{ | { | ||
printf(“hello, world\n”); | |||
return(0); | |||
} | } | ||
第25行: | 第26行: | ||
$ ./a.out | $ ./a.out | ||
hello, world | |||
选项 -o 用来指定所生成的可执行程序的文件名。下面的命令生成名为 howdy 的可执行程序: | 选项 -o 用来指定所生成的可执行程序的文件名。下面的命令生成名为 howdy 的可执行程序: | ||
第34行: | 第35行: | ||
$ ./howdy | $ ./howdy | ||
hello, world | |||
==源文件生成对象文件 == | ==源文件生成对象文件 == | ||
第56行: | 第57行: | ||
==创建共享库== | ==创建共享库== | ||
2008年3月12日 (三) 14:30的版本
C 编程中相关文件后缀
.a 静态库 (archive)
.c C源代码(需要编译预处理)
.h C源代码头文件
.i C源代码(不需编译预处理)
.o 对象文件
.s 汇编语言代码
.so 动态库
单个源文件生成可执行程序
下面是一个简单的“hello, world”程序的源代码:T
/* helloworld.c */ #include <stdio.h> int main(int argc,char *argv[]) { printf(“hello, world\n”); return(0); }
最简单直接的编译该代码为可执行程序的方法是,将该代码保存为文件 helloworld.c,并执行以下命令:
$ gcc helloworld.c
编译器通过检查命令行中指定的文件的後缀名可识别其为 C 源代码文件。GCC 默认的动作:编译源代码文件生成对象文件(object file),链接对象文件得到可执行程序,删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。在命令行中输入程序名可使其执行并显示结果:
$ ./a.out hello, world
选项 -o 用来指定所生成的可执行程序的文件名。下面的命令生成名为 howdy 的可执行程序:
$ gcc helloworld.c -o howdy
在命令行中输入程序名将使其执行,如下:
$ ./howdy hello, world
源文件生成对象文件
选项 -c 指示 GCC 编译源代码文件,但将对象文件保留在磁盘中并跳过链接对象文件生成可执行文件这一步。在这种情况下,默认的输出文件的文件名同源代码文件名一致,只不过后缀换为 .o 。例如:下面的命令将生成名为 helloworld.o 的对象文件:T
$ gcc -c helloworld.c
选项 -o 可用来指定生成的对象文件的文件名。以下命令将产生名为harumph.o的对象文件:
$ gcc -c helloworld.c -o harumph.o
当构建对象库或者生成一系列对象文件以备稍后链接用时,一条命令即可从多个源码文件生成对应的对象文件。下面的命令将生成对象文件arglist.o, ponder.o 与 listsort.o:
$ gcc -c arglist.c ponder.c listsort.c