Linux工程师新法宝:在Visual Studio上用C++ 写Linux

如今我们正在开发一个新的插件,一个能够让开发者在 Visual Studio (以下简称 VS ) 上建构能够在 Linux 上运行 C++ 程序的套件。开发者可以借由这个插件将 C++ 程序移转到 Linux 服务器、PC 以及移动设备上,也同时可以借由这个插件将这些机器连结至你的 VS 上。

  VS 将会自动地复制一份并在远端建构你的来源档,再运行带有除错器的应用程序。我们的这项计划也针对特殊的架构提供系统支持,包含 ARM 等。

  下方文章将继续介绍使用我们这套全新的 Linux 计划。

  目前我们仅支持在远端的目标 Linux 机器提供建构服务。我们并没有限制特定的 Linux 发布版本,但我们仍旧在一些工具的表现上有些相依性的差异。需要特别注意的是,我们需要 openssh-server、g++、gdb 以及 gdbserver。用你最习惯的套件管理工具来安装他们,例如在 Debian 类型的 Linux 就可以使用:

sudo apt-get install openssh-server g++ gdb gdbserver 

  安装

  下载 Visual C++ for Linux Development extension 或从 Visual Studio 上的插件管理员来获得。目前我们在 Visual Studio 上的 Android Tools 上已有相依支持。如果你已经安装了 VS 的话,你可以借由 Add Remove Programs 来新增这些功能,编辑 VS 然后在 Visual C++ 移动设备开发下选择他们。

  要开始一个新的项目可以透过以下路径:Templates > Visual C++ > Cross Platform > Linux。

  目前我们有三个可以使用的模板:针对像 Raspberry Pi 等物联网装置设计的 Blink、最基本的应用程序样板 Console Application 以及让开发者自己选择需要加入的来源档以及从预设设定起的 Empty。

  你的第一个 VS Linux 项目

  我们从建构一个主控台 app 开始。从模板新增完你的项目后,在 printf 叙述句的地方设下一个中断点,然后敲击 F5 或远端 GDB 除错器按钮。根据预设值,这个主控台 app 设定与 debug/x64 的环境相容。如果你的远端连线标的是 x86 或 arm 架构,那你需要先改变上述设定。在我演示的这个范例我使用的是 x64 Ubuntu VM。

  由于这是第一次连结到标的的 Linux 机器,所以会弹出一个连接资讯视窗,是由在建构项目时所触发的。

  我们同时支持密码以及认证形式的验证方式,包含使用复杂密码的认证。在第一次成功连接后,我们会将你的连结资讯储存以便在日后需要连接时快速存取。你可以从 Tools > Options > Cross Platform > Linux 的路径来管理你已储存的连结资讯,以及是的,密码/复杂密码是已加密形式储存的。我们也同时计划在未来的更新版本中,在连接时无需储存连结资讯。

  在连接的过程中,你的来源档会被复制到远端的 Linux 机器上,并触发 gcc 并根据项目的属性设定来建构原始码。在项目建构完毕之后,你的程序将会在远端的机器上执行,并停止在我们先前所设下的中断点上。

  Linux 项目属性

  我们可以借由以下的项目属性来理解,东西是怎么被部署到远端 Linux 机器上的。

  在 remote settings 下,你可以看到 remote 根目录是预设在 ~/projects/ ,且该路径下的远端项目目录会与我们的项目名称相符。从 Linux 机器上去看的话,我们可以在 ~/projects/ConsoleApplication1 下发现建构后的成品 main.cpp。 

  根据项目的 General setting,可以了解到我们针对 Output 以及 Intermediate 路径是怎么设定的。除此之外,你可以发现到这个项目是被设定成一个应用程序的 — 代表我们的项目执行档 ConsoleApplication1.out 是在 bin/x64/Debug/ 路径下。另外可以注意到的是,我们也同时支持静态以及动态的设定格式。

  Linux 物联网项目

  现在我们来研究物联网装置的部分 — 以 Raspberry Pi 为例。你可以使用任何类型的 Pi 来执行 Raspbian。在我们的 Blink 范例里我们使用 wiringPi — 如果你没有这个安装选项你也可以选择从 apt 或来源档来安装。在 Tools > Options 搜寻 Linux 来新增一个连结,然后点击 “add” 来新增一个连结到你的 Raspberry Pi。

  从项目属性设定的地方查看 Build Events 下的 Remote Post-Build Events。

  你可以借由这个设定在远端已建构好项目的 Linux 标的上执行指令。这个模板已先预设了针对 LED 输出的 GPIO pin,所以我们不需要再以 root 的身份执行我们的执行档。

  现在将一个 LED 连接到 Raspberry Pi 上的 pin 17 位置(如下图)。

  打开 main.cpp 档,并在第一个 digitalWrite 后 delay call 的地方设下中断点,然后敲击 F5。你可以看到你的 LED 灯亮起,且执行程序会在你下中断点的地方停住。将你的程序持续执行到下一个 digitalWrite call 之后便可以看到 LED 灯熄灭。

  可以透过浏览我们的物联网研发专页,来追踪所有我们目前针对这样的系统所释出的功能。

  桌面应用程序

  我们刚已在上述的文章中,介绍了无介面 (headless) 以及装置型的 Linux 应用程序,那桌面型的呢?在这里我们将介绍一点特别的:我们将在 Linux 桌面上执行一个 OpenGL 应用程序。首先要确定的是,你的 Linux 桌面已经设定为包含 OpenGL 的环境,下述是我们会需要用到的 apt 套件:libgles1-mesa、libgles1-mesa-dev、freeglut3 以及 freeglut3-dev。

  接下来请先创建一个空的 Linux 项目,然后前往  Julien Guertault’s OpenGL 教学下载旋转方块的来源档,将其解压缩并将 main.c 加到你的项目下。要能够运行 Intellisense,你需要将 OpenGL 的标头 (headers) 新增到 VC++ Directories,你可以从 OpenGL Registry 里下载他们。现在前往你的项目属性设定,然后新增 export DISPLAY=:0.0 到 Pre-Launch command 下。

  然后,在 Linker Input 下新增 “m;GL;GLU;glut” 到 Library Dependencies 栏位。

  另外,确认你的远端设定是对应到对的机器。

  接下來按下 F5。

  还有一些有趣值得下中断点的地方,例如大约在 80 行左右的位置有可以调整方块旋转的设定(试着调整看看 alpha 值),或在 KeyboardFunc 里可以检查按下键盘时所输入的值。

  开始实做原生的 Linux 应用

  我们期望您与我们对于这些新开放的可能拥有一样的期待。

  安装  Visual C++ for Linux Development extension,尝试看看并告知我们哪些是你可以成功运行,以及哪些是你遇到的阻碍或遭遇任何问题。如果你有兴趣的领域是在物联网的部分的话,可以前往关注我们的 IoT Development page 以获取最新资讯。你可以借由这个部落格,或展览页的额外分页、VS 回馈频道以及 Twitter 上的  @visualc、@robotdad 或我的帐号联系到我们。


原文地址:http://news.cnblogs.com/n/544444/


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(五)...

主办平顶山市教育体育局承办平顶山市教育体育局关心下一代工作委员会平顶山教育电视台教育部中国书画等级考试平顶山市招生管理办公室协办平顶山市书法家协会平顶山市美术家协会一比赛宗旨作品以中国战胜疫情为背景,以书法绘画为表现形式,真实记录全市中…

(转)Spring Boot启动过程 和 Bean初始化过程中的拓展接口详解

转自: Spring Boot启动过程 和 Bean初始化过程中的拓展接口详解_guyue35的博客-CSDN博客Spring Boot启动过程和 Bean初始化过程中的拓展接口详解1.背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内…

Oracle入门(七B)之表空间删除数据文件未删除

转载自 oracle表空间删除数据文件未删除清理老旧数据的时候,不太熟悉操作,直接把表空间删了,未删除数据文件, HIS20170927此表空间已删除但数据文件还在,这时新创建一个表空间直接指定到这个数据文件上. create tablespace HIS20170927 datafile /oracle/oradata/****/HIS20170…

玩玩Xamarin Evolve 2016带来的新特性(一)-iOS Simulator(for Windows)

编者语: Xamarin Evolve 2016给不少.NET社群的朋友带来了强心剂,做.NET还是有前途啊,特别在微软开源的策略上。我会在五一假期和大家谈谈Xamarin中大家比较关注的iOS Windows模拟器,Xamarin Forms Previewer,还有Xamarin WorkBook…

python实现倒n字形排列_Leetcode问题库——Z形变换(Python),补充X形变换,字形

Z字形变换题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:之后,你的输出需要从左往右逐行读取,产生出一个新的字符串&#x…

蓝绿发布,灰度发布及滚动发布

【README】 本文转自:理解蓝绿发布、灰度发布和滚动发布_Jitwxs的博客-CSDN博客_蓝绿发布和灰度发布的区别目前绝大多数公司的业务系统都是集群化部署,那么在新版本上线时,保证平滑稳定,尽量减少对线上用户的影响,就显…

Oracle入门(七)之表空间

表空间表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。 Oracle数据库中至少存在一个表空间,即SYSTEM的表空间。 (1)创建表空…

让我们Core在一起:ASP.NET Core amp; .NET Core

Microsoft .NET 自 2002 年发行 v1.0 以来,已经过了近 14 个年头,在这 14 年里面,.NET 日渐成熟并成为 Microsoft 的重要开发平台之一,只要是在 Windows 平台上的相关应用,几乎都可以使用 .NET 以及所属的 C# 及 VB 语…

python菱形画法解释_用Python画棱形

定义一个函数画棱形def diamond(height):"""Return a string resembling a diamond of specified height (measured in lines).height must be an even integer."""L[]lines/bs\\for i in range(1,int(height/21)):aline.rjust(i,s).ljust(i*2,b…

3.操作系统接口与系统调用

【README】 本文内容总结自 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 【1】操作系统接口 0)用户使用计算机3种方式: 命令行; 命令行执行 hello world图形界面;如计算机磁盘浏览器…

Oracle入门(十二A)之数据类型

Oracle数据类型 (1)char(2)varchar2(3)Number(4)Date(5)Blob、Clob、Nclob

在Linux以及Mac OS X启用F#

随着.NET Core的推进,如今我们在Linux和Mac OS X平台上也可以和原先Windows平台之下一样运行F#程序。Microsoft的F#项目经理David Stephens先生在Build 2016大会上向大家介绍了如何在Linux以及Mac OS X启用F#。 第一步需要安装.NET Core工具。这一步对于C#和F#来说是…

flask执行python脚本_如何在flask后端运行python脚本?

我有一个小瓶子应用程序,它接受用户输入并返回一些文本。在这里,用户输入被输入到另一个python脚本,比如temp.py,这个temp.py将返回一个应该返回给用户的值。例如:烧瓶.pyfrom flask import Flask, render_template, r…

4.操作系统历史

【README】 本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 【1】IBM7094 批处理操作系统: 一个job 一个job的顺序执行; 【2】 IBM OS360 1) 多道程序: 程序1 程…

Oracle入门(三)之连接与登录

一、启动Oracle服务 #cmd net start oracleserviceORCL net stop oracleserviceORCL二、进入SQLPLUS (1)没登录进入SQL C:\Users\mk>sqlplus /nolog #没有提示 (2)登录进入SQL C:\Users\mk>sqlplus C:\Users\mk>用户名:…

玩玩Xamarin Evolve 2016带来的新特性(三)-Xamarin Workbooks

编者语:五一祝各位劳动者快乐。今天是该系列文章的最后一篇,当然Evolve 2016还有很多很多的内容,但是我觉得iOS Simulator(for Windows), Xamarin Previewer ,以及Xamarin Workbooks是最为关键的三个技术,也是国内开发者比较关注的…

springboot单测用例

【README】 本文阐述了 springboot 单测开发方式&#xff1b; 【1】引入springboot 单测制品库&#xff1b; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.3.…

车联网 python_利用百度车联网提供的天气查询接口用python查询天气信息

(1)程序查询结果图(图中较下的图是百度查询天气的结果)(2)http://developer.baidu.com/map/carapi-7.htm 百度车联网接口说明中有天气查询的接口&#xff0c;目前是免费提供的(一天可以查询5000次)下表是接口返回的json数据。(表中##及后内容是为了方便的查看数据填写的){‘dat…

Oracle入门(六)之用户操作

定义&#xff1a;也叫方案&#xff0c;是一组逻辑对象的所有者。 验证方式&#xff1a;数据库验证和操作系统验证。 表空间和临时表空间&#xff1a;表空间为用户创建数据对象的存储表空间&#xff1b;临时表空间用于创建临时段。空间分配&#xff1a;表空间中&#xff0c;必须…

使用VS2015进行C++开发的6个主要原因

在今年的Build大会上&#xff0c;进行了“将你的C代码转移至VS2015的6个原因”的演讲&#xff0c;其中探讨了VS2015中对于C开发者们更有用的新功能。自从它在2015年七月的第一次发布后&#xff0c;VS2015一直在完善&#xff0c;并且比起对它的启动状态而言&#xff0c;它的两个…