在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++进行程序的编译呢,以及当编写大型工程时,如何提高编译效率呢?(先编译谁后编译谁?)

linux学习之编译-链接的更多相关文章

  1. 从四个问题透析Linux下C++编译&链接

    摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...

  2. linux下 GCC编译链接静态库&动态库

    静态库 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库, 我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后 ...

  3. Linux 64位编译\链接32位程序

    测试机器:Ubuntu14.04 64位 gcc编译32位程序,添加参数-m32: $ gcc -c -fno-builtin -m32 TinyHelloWorld.c ld链接32位代码,添加参数 ...

  4. Linux学习---GCC编译常见错误

    预处理错误: No such file or directory 出错原因:①包含错误:eg  #include <abc.h> //abc.h为用户自行编写文件 解决方法:⑴应改为#in ...

  5. Linux学习---GCC编译过程

    (一)GCC编译过程 预处理 cpp -o a.i a.c     //生成预处理文件 等同于[gcc -E] //预处理为将宏定义(#define)等进行替换. 编译 /user/lib/gcc/i ...

  6. Linux学习笔记 -- 硬链接与软连接(转)

    原文地址: http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html Linux链接概念 Linux链接分两种,一种被称为硬链接(Har ...

  7. Linux学习-核心编译的前处理与核心功能选择

    硬件环境检视与核心功能要求 根据自己的需求来确定编译的选项 保持干净原始码: make mrproper 我们还得要处理一下核心原始码底下的残留文件才行!假设我们是第一次 编译, 但是我们不清楚到底下 ...

  8. Linux学习之编译运行.c(C语言)文件

    在Linux命令行界面下,创建文件hello.c,进入vim编辑器,编辑一个简单的C语言文件 分解C语言文件执行过程,要经过预编译.编译.汇编.连接四个步骤后才能执行, 预编译:gcc -E hell ...

  9. Linux学习之编译安装apache

    疯狂吐槽腾某云..编译安装apache折腾了一下午..还是我不太熟练. 首先要先准备好安装apache的三个依赖包以及apache包.(一定要准备好!!折腾了一下午的小白握拳!!) -rw-r--r- ...

随机推荐

  1. gitlab CICD/schedules无法按照分钟执行

    多条Scheduling Pipelines 设置之后发现执行时间都是某个时间,分钟设置的无效不管用 修改/etc/gitlab/gitlab.rb gitlab_rails['pipeline_sc ...

  2. AndroidStudio中使用XML和Java代码混合控制UI界面实现QQ相册照片列表页面

    场景 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建Androi ...

  3. NB-Iot和GPRS信号通信模式的对比

    NB-Iot和GPRS信号通信模式的对比

  4. 《手把手教你构建自己的 Linux 系统》学习笔记(4)

    汇编链接器(Binutils) 这是一个软件包,这个软件包其实是一个工具集,里面含有了大量的用于汇编程序活着读取二进制文件相关的程序. CC 它是一条命令的别名,这条命令的作用是使用 GCC 的 C ...

  5. vue-cli中配置vuex流程和注意事项

    本文目录 vue-cli下新建站 配置路由更改HelloWorld.vue组件到新建Home.vue组件 安装vuex 测试是否安装成功vuex一:vue-cli下新建站 a)新建文件夹vuexStu ...

  6. C#画图之饼图

    public JsonResult DrawPie() { // 预置颜色 List<Color> colors = new List<Color>() { Color.Fro ...

  7. P2746 [USACO5.3]校园网Network of Schools [tarjan缩点]

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 BB 在 AA 学校的分发列表中,AA 也不一定在 BB 学校的列表中. ...

  8. Go 与 PHP 的语法对比

    Go 是由 Google 设计的一门静态类型的编译型语言.它有点类似于 C,但是它包含了更多的优点,比如垃圾回收.内存安全.结构类型和并发性.它的并发机制使多核和网络机器能够发挥最大的作用.这是 Go ...

  9. 诱人的 react 视频教程-基础篇(14 个视频)

    诱人的 react 视频教程-基础篇(14 个视频) 诱人的 react 视频教程 - 基础篇 #1 介绍「07:25」 诱人的 react 视频教程 - 基础篇 #2 create-react-ap ...

  10. python神器pycharm的安装

    1.下载PyCharm 官网下载:http://www.jetbrains.com/pycharm/download/#section=windows百度网盘下载:https://pan.baidu. ...