Windows+VSCode编译在Linux-x86_64环境上运行的程序

一、简介

本文主要介绍在Windows平台上使用VSCode,从而可以一键编译出运行在Linux-x86_64环境中的程序或库。

二、实现方式

① 交叉编译

② WSL(Windows Subsystem for Linux)

三、交叉编译

关于交叉编译的配置,我之前一篇博客里面已经非常详细地列举了步骤,只不过之前用的交叉编译工具链是Linux-Arm环境的,今天是Linux-x86_64的,步骤上其实一模一样,不同之处就是用的交叉编译工具链不一样。

之前的交叉编译教程博客链接: https://www.cnblogs.com/Clark-Zhang/p/16303434.html

linux-x86_64交叉编译工具链下载地址: https://pan.baidu.com/s/1gXCe9VzzvGAcdcfiYNG3hw?pwd=4h3u 提取码:4h3u

下载完后解压会得到一个文件夹,里面包含gcc-9.3.0文件夹和ubuntu-x64.cmake文件,把这两个东西与之前配置linux-arm时所用的gcc-7.5文件夹以及arm.cmake放在同一目录即可,然后按照教程步骤一步步来即可,linux-arm便用arm.cmake,linux-x86_64便用ubuntu-x64.cmake。

配置完后就能够点击build一键变异出运行在Linux-x86_64环境中的程序了(需要系统最低ubuntu-20.04)。

经过我的测试,正常编译C++程序是没什么问题的,但是如果程序调用了其他x86系统上编译的库,cmakelist.txt中可能需要加上add_compile_options(-fno-stack-protector),就在一开始加就行,否则编译会不通过。

综上,我感觉交叉编译勉强能用,但是却又感觉有那么一点瑕疵,所以我推荐用WSL的方式,配合VScode相当于本机编译了,没用过的人可能会觉得装个linux系统好麻烦,不想用,但是相信我,我也是个怕麻烦的人,我觉得好用的,那说明操作十分傻瓜化,用户体验很好。下面就开始介绍WSL方式。

四、WSL(根据官方文档,必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11)

  1. 安装wsl

1.1 自动安装

打开命令行输入wsl –install,自动安装,然后重启电脑。(我用的不是这种方法,下面我会介绍手动安装,其实也没几步)

1.2 手动安装

① win+i 键,在弹出的设置界面中点击更新和安全

② 点击左边列表中的开发者选项,将开发人员模式打开,默认是关的

Windows+VSCode编译在Linux-x86_64环境上运行的程序

③ 返回设置主页面,点击应用

Windows+VSCode编译在Linux-x86_64环境上运行的程序

④ 点击可选功能

Windows+VSCode编译在Linux-x86_64环境上运行的程序

⑤ 进去后拉到最下面,点击更多windows功能

Windows+VSCode编译在Linux-x86_64环境上运行的程序

⑥ 在弹出的窗口中拉到最下面,将图中所示勾选上。

Windows+VSCode编译在Linux-x86_64环境上运行的程序

⑦ 打开微软应用商店

Windows+VSCode编译在Linux-x86_64环境上运行的程序

⑧ 输入ubuntu进行搜索

Windows+VSCode编译在Linux-x86_64环境上运行的程序

⑨ 选择你想要的安装的ubuntu版本,我装的是20.04.4

⑩ 安装时会让你设置用户名和密码,随便起。大概几分钟就能装好

  1. 配置环境

以上步骤已经将linux系统装好了,但是想要编译程序还需要安装cmake以及gcc

以下命令都是在wsl命令行中输入

2.1 sudo apt-get update (更新环境,需要等一会)

2.2 sudo apt-get install g++(安装编译所需环境)

2.3 sudo apt install cmake (安装cmake)

  1. 使用vscode

3.1 vscode新建一个窗口

3.2 安装远程插件

Windows+VSCode编译在Linux-x86_64环境上运行的程序

3.3 点击vscode左下角绿色图标

Windows+VSCode编译在Linux-x86_64环境上运行的程序

3.4 选择图中所示这个,然后vscode能够直接连接到wsl,十分便捷!

Windows+VSCode编译在Linux-x86_64环境上运行的程序

连接成功会显示下图这个

Windows+VSCode编译在Linux-x86_64环境上运行的程序

3.5 然后选择打开文件夹,打开需要编译的项目,支持直接访问windows盘上面的文件夹,目录在/mnt, 下面就是各个盘符

Windows+VSCode编译在Linux-x86_64环境上运行的程序

Windows+VSCode编译在Linux-x86_64环境上运行的程序

3.6 之后就跟正常编译项目一样,选择编译器进行编译。

、总结

我个人更推荐wsl,跟本机编译没什么差别,而且和windows互通,访问文件十分方便。

Original: https://www.cnblogs.com/Clark-Zhang/p/16309189.html
Author: 朔月の流光
Title: Windows+VSCode编译在Linux-x86_64环境上运行的程序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/711627/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • XPath定位中and、or、not、contains、starts-with和string(.)用法

    下文总结了XPath常用的text()、and、or、not、contains,当然也还有类似的position、last、ends_with、starts_with等等。 dat…

    技术杂谈 2023年5月31日
    079
  • Java编译到执行的过程

    Java编译到执行的过程 执行过程: 编译→加载→解释→执行 运行过程 .Java→.class→装载到JVM→.class→可执行指令→调用系统硬件执行最终指令 详细过程 编译过…

    技术杂谈 2023年7月24日
    083
  • 平台指运行环境提供的能力的集合

    平台指运行环境提供的能力的集合 平台的一致性保证里服务的明确和统一,进而支持平台的复用和维护 一个人最好的习惯是独立思考、全面思考、深度思考、勤于思考、理性冷静、静坐沉思、定时反思…

    技术杂谈 2023年5月31日
    094
  • SQL语句复习整理

    SQL语句SQL 是用于访问和处理数据库的标准的计算机语言,SQL 指结构化查询语言 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。 SQL…

    技术杂谈 2023年6月21日
    0115
  • Go语言常见的并发模式

    Go语言常见的并发模式 并发不是并行 并发关注的是程序的设计层面,并发的程序也可以顺序执行,在多核CPU上才可能真正同时的运行,并行关注的是程序的运行层面,如GPU中对图像处理都会…

    技术杂谈 2023年7月11日
    066
  • 23种设计模式之状态模式(State)

    文章目录 概述 状态模式的优缺点 状态模式的使用场景 状态模式的结构和实现 * 模式结构 模式实现 总结 概述 当对象的状态改变时,同时改变其行为。 就拿QQ来说,有几种状态,在线…

    技术杂谈 2023年7月24日
    070
  • easyExcel入门使用

    1 easyExcel介绍 1) easyExcel官网介绍 传统操作Excel大多都是利用Apach POI进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多的缺陷: …

    技术杂谈 2023年7月10日
    075
  • Qt QImage类详解(QImage类型转换、QImage类函数及QImage像素操作)

    打开Qt帮助文档,会看到有关于QImage的描述如下:The QImage class provides a hardware-independent image represen…

    技术杂谈 2023年5月31日
    0121
  • SpringBoot 多环境配置文件切换

    背景 很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用…

    技术杂谈 2023年7月11日
    091
  • 初读鸟哥的linux私房菜的收获

    搞了十几年开发,一直是在windows下面搞.net开发,有一些不甘心,所以转行去搞java开发,当然也少不了要学习一下linux嘛。前同事波神是这方面的高手,给我推荐去读《鸟哥的…

    技术杂谈 2023年7月11日
    070
  • SpringBoot-swagger

    SpringBoot整合swagger SpringBoot-swagger 13.1 导入相关依赖 io.springfox springfox-swagger-ui 2.9.2…

    技术杂谈 2023年6月21日
    0119
  • System.gc()和Runtime.gc()的区别?

    java.lang.System.gc()只是java.lang.Runtime.getRuntime().gc()的简写,两者的行为没有任何不同 System.gc()和runt…

    技术杂谈 2023年5月31日
    093
  • APACHE快速安装流程梳理

    快速安装开始: 【环境配置1】 yum -y install gcc gcc-c++ wget 保留操作(可跳过): yum -y removeapr-util-devel apr…

    技术杂谈 2023年7月10日
    051
  • C#根据日期范围过滤IQueryable<T>集合

    需要扩展IQueryable 现在可以筛选满足某个日期范围内的集合。比如: Original: https://www.cnblogs.com/darrenji/p/5383296…

    技术杂谈 2023年5月31日
    084
  • 架构设计之数据分片

    数据分片技术作为目前架构设计中处理大数据的一种常规手段,当前被广泛用于缓存、数据库、消息队列等中间件的开发与使用当中,例如在数据量较大的项目当中,系统的性能瓶颈主要来自于与数据库的…

    技术杂谈 2023年7月25日
    069
  • vim 删除空格后的内容

    联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20= Original: https://www.cnblogs.com/zl1991/p/16523896….

    技术杂谈 2023年6月1日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球