Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代码对象和可执行文件之间的区别 我是C++初学者,我正在学习语言的基础知识。我的书中有一个关于编译器的主题,我的问题是我无法理解文本想要说什么:_C++_Linker - Fatal编程技术网

代码对象和可执行文件之间的区别 我是C++初学者,我正在学习语言的基础知识。我的书中有一个关于编译器的主题,我的问题是我无法理解文本想要说什么:

代码对象和可执行文件之间的区别 我是C++初学者,我正在学习语言的基础知识。我的书中有一个关于编译器的主题,我的问题是我无法理解文本想要说什么:,c++,linker,C++,Linker,C++是一种编译语言,因此您需要用 计算机可以执行的文件。此文件由 编译器,称为目标代码(.obj),但类似 “hello world”程序由我们编写的一部分和一部分组成 关于C++库的。链接器链接程序的这两个部分,并 生成可执行文件(.exe) 为什么我的书告诉我计算机执行的文件是带有obj后缀(目标代码)的文件,然后说它是带有exe后缀的文件?目标文件是源代码编译成二进制机器语言的,但它们包含未解析的外部引用(例如printf)。它们可能需要与其他对象文件、第三方库以及几乎总是与C/C++运

C++是一种编译语言,因此您需要用 计算机可以执行的文件。此文件由 编译器,称为目标代码(.obj),但类似 “hello world”程序由我们编写的一部分和一部分组成 关于C++库的。链接器链接程序的这两个部分,并 生成可执行文件(.exe)


为什么我的书告诉我计算机执行的文件是带有obj后缀(目标代码)的文件,然后说它是带有exe后缀的文件?

目标文件是源代码编译成二进制机器语言的,但它们包含未解析的外部引用(例如
printf
)。它们可能需要与其他对象文件、第三方库以及几乎总是与C/C++运行库相链接


在Unix中,对象和exe文件都是相同的COFF格式。唯一的区别是对象文件有未解决的外部引用,而.AUD文件没有。

< P> C++规范是英文的技术文档。比如,看看里面(或者花很多钱购买平装版ISO标准)。理论上,你不需要一台计算机来运行C++程序(你可以使用一堆人奴隶,但这将是不道德的、低效的和不可靠的)。

可以有一个C++实现,它是一个,而不是(例如)

如果你在你的笔记本上安装Linux(我建议对每个学生做),那么你可以有几个C++编译器,尤其是(使用代码> G++< /COD>和<代码> CLAN< /COD>命令)。源文件被后缀“代码> > CC <代码> >或<>代码> cxx < /> >或 > CPP,甚至<>代码> c>代码>(我更喜欢<代码> .cc>代码>),可以让编译器处理其他后缀文件作为C++源文件(但不是常规的)。然后,两者(后缀为

.o
)和共享相同的格式。按照惯例,可执行文件没有任何后缀(例如,
g++
是一个二进制可执行文件,除了启动其他进程,如
cc1plus
-编译器本身-,
as
-the-,
ld
-the-etc.)

在所有情况下,我强烈建议:

  • 要在编译期间启用所有警告和调试信息(例如,使用
    g++-Wall-g
    …)
  • 改进源代码,直到没有警告为止
  • 了解如何使用调试器(
    gdb
  • 能够在命令行上构建程序
  • 使用版本控制系统,如
  • 要使用好的编辑器,如
    emacs
    gedit
    geany
    gvim
  • 在多个源文件中编写程序后,学习如何使用像
    make
  • 学习C++ 11(甚至可能)而不是老的C++标准
  • 还学习其他编程语言(OcAML,Stuts,Haskell,Prolog,Scala,…),因为它们将改进您的思维和C++(
  • )编码方式。
  • 研究几种用C语言编写的自由软件的源代码++
  • 阅读您正在使用的每个函数的文档,例如,在Linux上或中
  • 了解什么是正确的(事实上,您的程序有时工作不正确)
具体地说,在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++编译器接收源代码文件并生成目标代码文件
  • 链接器接收目标代码文件和库,并生成可执行文件

大多数编译器安装程序都有一个程序,用于运行这些不同的应用程序。因此,如果你使用的是 GCC ,那么 GCC 程序将首先运行C++预处理器,然后是C++编译器,然后是链接器。但是,你可以修改命令“代码> GCC < /C> >,用命令行选项来告诉它只运行C++预处理程序。处理器或仅编译源文件而不链接源文件或仅链接目标代码文件

计算机语言和程序设计简史 用于计算机编程的语言以及各种软件开发工具多年来不断发展

第一