导航:首页 > 源码编译 > gcc编译直接生成机器码

gcc编译直接生成机器码

发布时间:2023-01-01 04:41:29

❶ 关于C语言的编译过程,GCC与windows下的c编译器(如VS2010)的编译过程是否存在区别

一般的编译步骤是如此, 但也有一步到位的编译器

❷ 请问c语言的源程序被编译后的代码是机器码吗

首先语言和被编译成的代码没有直接关系。有把Java编译成机器码的编译器也有把C语言编译成Java字节码的编译器。

机器码只是CPU直接认读的编码,不等于和硬件打交道的。操作硬件是你通过程序操作CPU做到的。操作系统只不过是别人写的程序而已,说到底还是程序。

❸ 请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)

gcc -S *.c 预处理+反汇编

❹ 器GCC开发的软件,一定就是开源软件么

gcc是开源的,不意味着,用它编译的程序也是开源的,gcc是个编译器,用它编译也会生成2进制的机器码
你写的程序是否开源取决于你自己
你想不开源,就编译,你想开源就别编译,直接把源码发布出去
开源是啥意思,你用任何文本编辑器编写一个程序(即便不用GCC),这些文本文件都是源程序
用任意一款编译器编译后,都将生成2进制机器码,不管那款编译器,不管编译器是不是开源的,编译器编译器,何为编译器,"编译"的意思,就是把你写的源文件,翻译成计算机能识别的2进制机器码,所以提到"编译"二字就已经意味着不开源了

❺ C语言如何编译成可以直接在CPU运行的二进制码

你编译好的可执行文件就是二进制文件,包括机器码指令和数据。Linux上生成的一般是ELF格式,带文件头和段记录,你可以用strip什么的去掉。

❻ Linux下的gcc编译后生成Linux下的可执行文件,window下gcc编译后是exe文件,为什么不一样啊是怎么做到的

首先,这win和Linux下的gcc功能是一样的,实际的gcc.exe和linux下的gcc这两个文件不是一样的,他们毕竟需要在工作在不同的平台上,而且他们做的一些工作是有区别的。
编译过程是把源文件翻译成机器码,然后链接成一个整体,拼接成一个文件。不管是win下的exe还是Linux下的ELF,都是按照一定规范来的,比如头部放什么,尾部放什么,中间又存哪些信息等。但是,如果要编译出正确的可执行的文件,不同的操作系统里就必须按照不同的规范来组织这个文件。
这些文件的执行过程,并不是说它们可以直接执行,执行的时候,系统把它们从磁盘上,读到内存中,经过一系列的前期工作,才可以最终执行起来,这个前期过程都是操作系统来搞定的。
你不应该问gcc是怎么做到的,而应该问gcc为什么需要这样。如果你需要知道细节,去看《程序员的自我修养》

❼ C语言代码怎么编译成.o文件再怎么变成.exe文件

linux下gcc -c wen.c -o wen.o 生成.o文件gcc wen.o -o wen 就变成.exe文件

❽ C语言编译后是生成汇编代码还是直接生成机器代码

不会是这两种语言代码,而是编译后直接生成二进制文件(.obj文件),再通过连接器链接成二进制文件(.exe/.dll/.ocx/.sys等)

❾ 怎么用gcc编译文件

在终端中输入 gcc 文件名 -o 目标文件名
然后 ./目标文件名 就行了,没有目标文件名,自动存为 a
执行 ./a 就行了。

在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶
A)#include <myinc.h>
B)#include “myinc.h”
其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。

GCC执行过程示例

示例代码 a.c:
#include <stdio.h>
int main()
{
printf("hello\n");
}
预编译过程:
这个过程处理宏定义和include,并做语法检查。
可以看到预编译后,代码从5行扩展到了910行。
gcc -E a.c -o a.i
cat a.c | wc -l
5
cat a.i | wc -l
910
编译过程:
这个阶段,生成汇编代码。
gcc -S a.i -o a.s
cat a.s | wc -l
59
汇编过程:
这个阶段,生成目标代码。
此过程生成ELF格式的目标代码。
gcc -c a.s -o a.o
file a.o
a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
链接过程:
链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
gcc a.o -o a
程序运行:
./a
hello
编辑本段
GCC编译简单例子

编写如下代码:
#include <stdio.h>
int main()
{
printf("hello,world!\n");
}
执行情况如下:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.c -o hello
./hello
hello,world!

❿ c++编译器都有什么,怎么可以用命令行编译c++,怎样学习c++,c++和vc++的区别是什么

c++的编译器常见的有 微软的, GCC(linux下最常用的,也有windows版本,叫mingw) 和 intel的(intel有不少好东西,对性能要求高的话可以考虑)
但是集成开发环境就多了 微软的 visual studio (VC6 VC2005 VC2008)系列,也可以把intel的编译器挂到VS下面,取代微软的编译器,dev-c++ 和 codeblocks 这两个用的都是用的GCC的编译器。
windows下 ,最好不用命令行编译很麻烦的,大一点的项目还要写makefile来管理,linux下 g++ -o file file.cc 然后 ./file 就能执行刚才的程序了
学C++ 多练 多写代码 找本好的参考书 比如 c++ primer ,教材随便找本就行了 网上可以下到电子书的
c++是一门语言 而VC++通常指的是微软为了开发windows下的图形界面程序,而给出的一些API函数,以及封装了这些API函数的MFC库,它们的语法是C++的语法。C++在linux下可以照常使用,但VC++到了linux下就没法用了,因为linux下没有MFC库,当然它也有自己的一些图形库

阅读全文

与gcc编译直接生成机器码相关的资料

热点内容
网店美工pdf 浏览:447
一堆文件夹怎么弄出来 浏览:743
博途如何编译硬件 浏览:418
fortran程序pdf 浏览:504
电池消耗算法 浏览:394
服务器中断连接怎么处理 浏览:222
上世纪互联网不发达程序员很难 浏览:841
语音识别android开源 浏览:762
地埋式垃圾压缩中转站 浏览:902
apachehttpdlinux 浏览:944
快递员中通app预付款是什么 浏览:843
java路径转义 浏览:857
keytool加密算法 浏览:131
笑脸图案的APP相机是什么软件 浏览:249
app软件为什么会被下架 浏览:981
从内存到硬盘的命令是 浏览:52
程序员的爸爸们的发型 浏览:123
魔兽世界伤害压缩是怎么压的 浏览:976
压缩机型号hp 浏览:959
配音虚弱的程序员 浏览:61