代码对象和可执行文件之间的区别 我是C++初学者,我正在学习语言的基础知识。我的书中有一个关于编译器的主题,我的问题是我无法理解文本想要说什么:
C++是一种编译语言,因此您需要用 计算机可以执行的文件。此文件由 编译器,称为目标代码(.obj),但类似 “hello world”程序由我们编写的一部分和一部分组成 关于C++库的。链接器链接程序的这两个部分,并 生成可执行文件(.exe)代码对象和可执行文件之间的区别 我是C++初学者,我正在学习语言的基础知识。我的书中有一个关于编译器的主题,我的问题是我无法理解文本想要说什么:,c++,linker,C++,Linker,C++是一种编译语言,因此您需要用 计算机可以执行的文件。此文件由 编译器,称为目标代码(.obj),但类似 “hello world”程序由我们编写的一部分和一部分组成 关于C++库的。链接器链接程序的这两个部分,并 生成可执行文件(.exe) 为什么我的书告诉我计算机执行的文件是带有obj后缀(目标代码)的文件,然后说它是带有exe后缀的文件?目标文件是源代码编译成二进制机器语言的,但它们包含未解析的外部引用(例如printf)。它们可能需要与其他对象文件、第三方库以及几乎总是与C/C++运
为什么我的书告诉我计算机执行的文件是带有obj后缀(目标代码)的文件,然后说它是带有exe后缀的文件?目标文件是源代码编译成二进制机器语言的,但它们包含未解析的外部引用(例如
printf
)。它们可能需要与其他对象文件、第三方库以及几乎总是与C/C++运行库相链接
在Unix中,对象和exe文件都是相同的COFF格式。唯一的区别是对象文件有未解决的外部引用,而.AUD文件没有。 < P> C++规范是英文的技术文档。比如,看看里面(或者花很多钱购买平装版ISO标准)。理论上,你不需要一台计算机来运行C++程序(你可以使用一堆人奴隶,但这将是不道德的、低效的和不可靠的)。
可以有一个C++实现,它是一个,而不是(例如)
如果你在你的笔记本上安装Linux(我建议对每个学生做),那么你可以有几个C++编译器,尤其是(使用代码> G++< /COD>和<代码> CLAN< /COD>命令)。源文件被后缀“代码> > CC <代码> >或<>代码> cxx < /> >或
)和共享相同的格式。按照惯例,可执行文件没有任何后缀(例如,.o
是一个二进制可执行文件,除了启动其他进程,如g++
-编译器本身-,cc1plus
-the-,as
-the-etc.)ld
- 要在编译期间启用所有警告和调试信息(例如,使用
…)g++-Wall-g
- 改进源代码,直到没有警告为止
- 了解如何使用调试器(
)gdb
- 能够在命令行上构建程序
- 使用版本控制系统,如
- 要使用好的编辑器,如
、emacs
、gedit
或geany
gvim
- 在多个源文件中编写程序后,学习如何使用像
make
- 学习C++ 11(甚至可能)而不是老的C++标准
- 还学习其他编程语言(OcAML,Stuts,Haskell,Prolog,Scala,…),因为它们将改进您的思维和C++( )编码方式。
- 研究几种用C语言编写的自由软件的源代码++
- 阅读您正在使用的每个函数的文档,例如,在Linux上或中
- 了解什么是正确的(事实上,您的程序有时工作不正确)
gedit
或emacs
(使用类似gedit Hello.cc
的命令)等编辑Hello World程序(文件Hello.cc
),使用g++-Wall-g Hello.cc-o Hello
命令编译它,使用gdb./Hello
调试它,然后重复(不要忘记使用git
命令进行版本控制)
有时候,生成一些C++代码是有意义的,例如通过shell、Python或<代码> AWK< /code >脚本(或者甚至是由C++编写的C++程序生成程序)。
也可以理解,AN不是编译器(而是为您运行编译器)。
< P>从C或C++源文件创建应用程序的基本步骤如下: (1) 源文件由人创建或由程序生成,(2)源文件被编译(实际上是两个步骤,预处理器和编译)为目标代码,(3)C/C++编译器创建的目标文件被链接以创建.exe <> p>因此,您可以将计算机程序的一个版本、源文件转换为另一个版本,即可执行文件。编译C++源以生成目标文件。然后将对象文件链接起来生成可执行文件。 在大多数情况下,在C和C++中编译和链接过程中涉及到几个不同的程序。每个程序都接收某些文件并创建新文件。- C/C++预处理器接收源代码文件并生成源代码文件
- C/C++编译器接收源代码文件并生成目标代码文件
- 链接器接收目标代码文件和库,并生成可执行文件