arm-linux-gcc怎么编译自己写的头文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arm-linux-gcc怎么编译自己写的头文件相关的知识,希望对你有一定的参考价值。
linux gcc编译c文件头文件linux gcc编译c文件头文件,使用GCC编译器编译C语言
凶猪下山
转载
关注
0点赞·1047人阅读
GCC编译C源代码有四个步骤:预处理—->编译—->汇编—->链接。
可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序的过程。
下面将通过对一个程序的编译来演示整个过程。
#include
int main()
printf("happy new year!\n");
return 0;
1:预处理:编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。
预处理 命令:gcc -E hello.c -o hello.i
作用:将hello.c预处理输出hello.i
2:编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可用gcc的参数-S来参看。
编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式描述了一条低级机器语言指令。
编译命令:gcc -S hello.i -o hello.s
作用:将预处理输出文件hello.i汇编成hello.s文件
3:汇编:把编译阶段生成的.s 文件转换为二进制目标代码。可用gcc的参数-c来参看。汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成可重定位目标程序的格式, 并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言。
汇编 命令:gcc -c hello.s -o hello.o
作用:作用:将汇编输出文件hello.s编译输出hello.o文件
4:链接:把obj文件链接为可执行的文件:链接器(ld)负责.o文件的并入。结果就是hello文件,它是一个课执行的目标文件,可以加载到存储器后由系统调用。
链接命令:gcc hello.o -o hello
一步操作的话是: (-o必须在hello之前 )
$gcc hello.c -o hello
$./hello或者:(会默认生成a.out文件)
$gcc hello.c
$./a.out 参考技术A 一个C文件要经过预处理、bianyi编译、汇编和连接才能变成可执行文件。
1.预处理
源文件中,以‘#’开头的命令被称为预处理命令。如包含“#include”、“#define”、“#if”和“#ifdef”等。预处理就是将包含的文件插入到原文件中,将宏定义展开,根据条件编译命令选择要使用的代码,最后将这些代码输出带一个".i"的文件中等待进一步处理。预处理将用到arm-linux-cpp工具。
2.编译
编译就是把C代码比如上述的.i文件翻译成汇编代码。所用到的工具为ccl.
3.汇编
汇编就是将上述的汇编代码翻译成符合一定格式的机器代码,在linux上一般表现为elf目标文件(OBJ文件),用到的工具为arm-linux-as,“反汇编”是指将机器代码转化为汇编代码。
4.连接
连接就是将上述生成的OBJ文件跟系统库的OBJ文件、库文件连接起来,最终生成可以在特定平台上运行的可执行文件。用到的工具为arm-linux-ld。
在Ubuntu下,安装arm-linux-gcc交叉编译器,环境变量也都设置好了
arm-linux-gcc -v执行成功,但执行arm-linux-gcc时却出现arm-linux-gcc: no input files,什么原因啊?求教各位大虾
参考技术A no input files,不就是没有输入文件嘛。难道是你在执行这条命令时没有加上源码文件??或者这个文件不再当前目录下?仔细的看看。追问具体怎么操作啊 我的arm-linux-gcc在/usr/local/arm/3.4.1/bin下,我cd到此目录下,结果还是一样,no input files,怎么回事啊
追答你不是这样执行? arm-linux-gcc XXX.c
我的意思是说你是不是忘记了XXX.c文件了?因为on input files 就是缺少要编译的文件提示的错。
噢 我编译的arm-linux-gcc -o hello hello.c结果为/usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
这个问题是链接库时找不到libgcc_s这个库。
看看您的/usr或/usr/lib/目录下有没有这个以libgcc_s开头的库文件。
您的应该是没有的,找到这个库文件,拷贝到这两个目录下其中一个就可以了。
是啊 什么意思啊
参考技术C cd到你写好的 *.c 文件所在的目录然后 arm-linux-gcc -o 999 1.c
其中999为任意取的输出文件名,1.c为待编译的文件
希望对你有帮助追问
你好 我arm-linux-gcc -o hello hello.c结果为/usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
hello.c是之前gcc编译的的程序,应该没有问题,可结果是什么原因啊??谢谢你
我也是初学者,这个真不懂……
要不你换一个版本的交叉编译器试试?
没有啊 因为我执行arm-linux-gcc -v编译结果正确,不就说明arm-linux-gcc安装没问题吗
以上是关于arm-linux-gcc怎么编译自己写的头文件的主要内容,如果未能解决你的问题,请参考以下文章
如何用arm-linux-gcc编译驱动程序,Makefile文件怎么写?
我include自己的头文件,编译器却提示找不到,大家帮忙看看怎么回事好么?
用Linux编译程序时用到eXosip这个库,下载安装后,gcc编译程序能通过,arm-linux-gcc则不行,该怎么做?