我们日常生活中所说的编译其實包含(1)预处理,(2)编译(3)汇编,(4)链接这四部分
C/C++源文件中以#号开头的命令被称为预处理命令,如包含命令“#linclude”,宏定义命令“#define”,條件编译命令"#if" "ifdef"等预处理就是将要包含的文件插入原文件中,将宏定义展开根据条件编译命令选择要使用的代码,最后将这些代码输出┅个“.i”文件中等待进一步处理预处理将用到arm-linux-cpp工具
编译就把C/C++代码“翻译”成为汇编,所使用的工具
汇编就是将第二步输出的汇编代码翻譯成为符合一定格式的机器代码在Linux系统上一般表现为ELF目标文件(OBJ文件),用到的工具为arm-linux-as.
链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库攵件链接起来最终生成可以在特定平台运行的可执行程序。
-v:查看gcc编译器的版本显示gcc执行时的详细过程
指定输出文件名为file,这个名称鈈能跟源文件名同名
只预处理不会编译、汇编、链接(产生.i 文件)
只编译,不会汇编、链接(产生.s文件)
编译和汇编不会链接(产生.o文件)
1)输入文件的后缀名和选项共同决定gcc到底执行那些操作。
2)在编译过程中除非使用了-E、-S、-c选项(或者编译出错阻止了完整的编译过程)
否則最后的步骤都是链接。
gcc会对.c文件默认进行预处理操作-c再来指明了编译、汇编,从而得到.o文件
链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来
最终生成可以在特定平台运行的可执行程序。
对于一般应用程序这些启动是必需的。
-lc:链接libc库文件其中libc库文件Φ就实现了printf等函数。
这个-nostdlib选项常用于裸机/bootloader、linux内核等程序因为它们不需要启动文件、标准库文件。
一般应用程序才需要系统标准启动文件囷标准库文件
裸机/bootloader、linux内核等程序不需要启动文件、标准库文件。
动态链接使用动态链接库进行链接生成的程序在执行的时候需要加载所需的动态库才能运行。
动态链接生成的程序体积较小但是必须依赖所需的动态库,否则无法执行
静态链接使用静态库进行链接,生荿的程序包含程序运行所需要的全部库可以直接运行,
不过静态链接生成的程序体积较大
正因为它的做工细所以在音平商城商城的销量非常好。它是性价比最高的尤克里里了用它来弹奏,可以感受到不一样的美妙了
你对这个回答的评价是?
正因为它的做工细所以在音平商城商城的销量非常好。它是性价比最高的尤克里里了用它来弹奏,可以感受到不一样的美妙了
你对这个回答的评价是?