• linux学习之编译-链接


    在Windows下使用习惯了IDE,导致我们对程序的编译链接没有一个清晰的认识,甚至混淆了编辑器和编译器的概念。在学习Linux时,这些问题就暴露出来了。

    实际上,我们应该严格区分一个程序从产生到执行的整个过程:写代码->编译->链接->可执行程序。

    1 写程序

       严格来说,无论我们是否在IDE中写程序,我们都相当于在一个记事本上写了一个.txt文件。在进行编译之前,我们写的程序就是一堆文字而已,并没有什么逻辑关系而言,这一点很重要!!!

    即使在Windows中,在VS中写c++程序,所提供的写程序界面无非是一个文本编辑器而已,也就是如果我们有合适的编译,链接工具,我们甚至不需要IDE,只需要一个 记事本 即可!!!在Linux下,这个概念就凸显出来了,无论是vim还是vscode还是自带的记事本 都没有本质的区别,只不过是一个文本编辑器而已。

    2 编译-链接

    我们写一个程序的本意并不是写一个只读只写文本,而是写一个具有某种功能的可执行的文件。这就需要我们的编译和链接了,至于编译和链接到底是干什么的,在次不再赘述,在其他文章中有说明。我们只想说明,在Linux如何编译链接:

    使用g++编译链接c++文件,使用gcc文件编译连接c文件。

    首先,需要安装 g++或者gcc,方法网上有,在此说明,如何查看自己是否安装了g++呢, 使用命令:whereis g++ 可以查看g++安装的位置,自然可以查看是否安装了,或者使用g++  --version命令同样可以查看。

    那么具体的过程是什么样的呢?下面举例说明我们写程序到编译连接的过程,

    比如我们在桌面写了一个helloword.cpp文件(假如就是用记事本写的),注意只是给它了一个后缀名,这只是一个普通的文件,并不是c++程序,此时,我们需要对其编译链接,生成可执行的文件。那么首先对于Linux来说,可执行文件的后缀是.out。(因为我们都知道在Windows下可执行文件的名称是exe)。

    那么如何把一个helloword.cpp文本文件变成 helloword.out文件?打开终端,输入以下不同的命令,可以得到不同的结果

    g++ –c Hello.cc  编译文件,生成目标文件 Hello.o

    g++ Hello.o –o abc  连接 并重命名为可执行文件 abc

    g++ Hello.cc    编译连接一起,生成a.out

    g++ Hello.cc –o hello 生成a.out并命名为hello
    可以采用  ./filename的方式执行上述生成的.out文件

    上述是在桌面环境,且只有一个cpp文件,但问题在于,我们使用桌面文本编译器,无法高效编写程序(比如提示词,缩进,等等..),这个时候不得不使用其他高级的编辑工具(注意本质仍然是文本编辑工具,并不是IDE,如vim和vscode都是文本编辑器),这些编辑工具仍然不具备编译链接的功能,但是可以提高写代码的效率,这个时候我们会使用vim或者vscode这样的工具,那么使用这这些工具时,如何调用g++进行程序的编译呢,以及当编写大型工程时,如何提高编译效率呢?(先编译谁后编译谁?)

  • 相关阅读:
    Html中常用的属性
    vue-页面回退
    vue-watch
    html
    Html-列表
    vue项目中px自动转换为rem
    vuex使用
    localStorage的使用
    slot
    模糊查询
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/10964583.html
Copyright © 2020-2023  润新知