Visual C++ for Linux的更新

[原文发表地址] Visual C++ for Linux Updates

[原文发表时间] 2016/06/07  Marc Goodner – MSFT

更新于6/14/2016:我们更新了原始的发布公告,更新的内容如下。如果你想访问一个包含所有有关扩展的页面,就访问这个页面即可。下面的内容和原始发布公告中是相同的,它仅仅是原始发布公告中更新的部分。

我们很高兴提供一个VC++ for Linux扩展的更新,它今天会有一个新的版本发布。现在去获取它(然后记得回来哦) 。我们已经有一些改动,从我们最初发布的版本上做了整体的改进同时处理您的反馈。我们将在这里告诉您在这个版本上一些新的功能,也会向您阐明您的反馈是如何指引我们的,同时也会给一些使用的小技巧和展示如何在您的Intel Ediso平台上的物联网工程中使用这个扩展。 请做一下简短的问卷调查,以便帮助我们了解更多关于你是如何进行跨平台开发。这有许多不同用途的Linux操作系统。我们很乐意听到你是如何使用的扩展。我们也感兴趣直接听到你的声音,如果你愿意被联系,请通过这个问卷调查让我们知道。直接和人们交谈他们是如何使用这个扩展对我们已经有了极大的帮助,我们想在未来有更大的提高。我们希望指定一些我们可以经常定期联系的人,这些人可以在我们需要一些反馈和试用新版提供帮助。

我们想提醒您Visual C++ for Linux 的更新仍在继续。我们正在对跟踪连接的文件进行更改。不幸的是,现在的更新会重写现有的文件并且这些文件将不会被兼容,这意味着任何现有的定义的连接都将丢失。随着我们的功能开始稳定和成熟,我们将停止这样做。

控制台窗口

此次更新中最明显的变化是,我们已经添加了一个控制台窗口与远程可执行程序进行交互。此窗口显示不只是您的程序的输出,同时还可以进行输入。要激活此窗口,使用菜单中的调试,Linux控制台。如下的截图是它在执行中的样子。

这是一个简单程序可以让您试验这些功能。

 #include <cstdio>

void log(char filename[], char visitor[])
{
 FILE * pLog;
    pLog = fopen(filename, "a");
    if (pLog != NULL)
   {
       fputs(visitor, pLog);
       fputs("\n", pLog);
      fclose(pLog);
   }
}

int main(int argc, char* argv[])
{
 if (argc != 2) 
 {
       printf("Please pass filename as input parameter\n");
        return 1;
   }
   char input[20];
 printf("What IDE are you using?\n");
    scanf("%19[0-9a-zA-Z ]", input);
       printf("%s! You can use that with me?!\n", input);
   log(argv[1], input);
       return 0;
}

在您工程属性页面的调试项的命令参数输入指定文件名。您也可以在那一页设置一个工作目录如果没有设置,那么宿主目录将是您的工作目录。

已报告的问题

我们想感谢每一个给我们发过问题报告的人。您的反馈是非常中重要的。它不仅仅是帮助我们确定我们知道的事情的优先级,它也能帮助我们识别和修复我们不知道的事情。我们首要的更新就是处理我们之前还没有遇到过的崩溃问题的报告。一些类似的问题像拒绝访问只读文件在我们在之前的测试中还没有碰到过。我们要自己偶然碰到它将会花费很长的时间,但是这些所报告的对我们的源代码管理工作是至关重要的。其他的有一些问题我们可能已经意识到了,这样反馈也更加提高了他们这些问题的重要性。

这里是我们用户所报告的问题的抽样。在这篇文章的结尾,你会看到更改内容的完整列表。

  • 在登陆注册时崩溃
  • 在调试过程,添加对工作目录和命令行参数的支持
  • 增加可以使用工程文件夹外部 文件的功能修复了被拒绝访问所上传只读文件的错误
  • 修复以root身份登陆的问题
  • 修复了清空文件扩展名输出的问题现在的输出中可以没有文件的扩展名

再一次,感谢你的反馈意见并请继续发送您的反馈。

详细的编译输出

我们得到很多问题关于到底什么样的参数被的传给了GCC命令行。我们的编译输出不能明显的显示出来,但是你是可以让它显示的。有两种方式进行更改设置而达到这样的效果。在快速检索框中输入“详细” 关键字进行检索,或者在工具->选项->项目和解决方案->生成并运行来设置。现在当进行编译时,把MSBuild项目生成输出详细级别设置为“诊断”。看所有的信息是否在输出窗口。如果您有这个问题,这将能帮助你知道什么参数传给gcc来编译您的程序。

获取您的头文件

每个人都热爱智能感应提示,但是我们无法你的Linux操作系统进行头文件的同步。每个都有自己的方式共享或者复制这些文件,这将非常的庞大。我想分享一个简单的方式做到这一点,这个方法我在在准备下一节关于Intel Edison中使用到了。在我的窗口框中使用PSCP命令,我在我的Windows机器上本地简单的抓取整个文件夹。

pscp -r root@192.168.2.15:/usr/include .

现在,在你的工程属性中跳转到VC++ 目录的页面并且添加你本地的路径。

如何在Intel Edison板上使用VC++ for Linux

使用VC++ for Linux扩展与Intel Edison生在很大程度上像任何其他的Linux系统。首先你要确保你已经按照英特尔的说明安装您的设备 。一旦你将其连接到你的无线网络,你应该可以通过我们的连接管理器来连接你的Edison。如果您需要直接连接您的Edison,你可以参照这些说明 通过USB将以太网与你的Edison连接,这样我们的连接管理器也是可以找到你的Edsion的。

Edison让使用传感数据生成物联网应用程序变得更加容易。像Arduino扩展板这个附件一样,它使得插件的连接更加容易,例如来自Seeed Studio公司的Grove扩展板。这个扩展板允许您使用任何可用的Grove传感器而无需担心在面板上电路布线的问题。你只需要上传你的代码到板子上即可。Intel公司使得这个更加容易,只需要使用他们的传感器程序库,这个库包含了很大范围内的传感器,包括Grove公司的。

这里显示的是Edision计算模块在Arduino扩展板上,该扩展板还附带了一个Grove扩展板,并且插着一个温度传感器

在Visual Studio中,创建一个新的项目,并在VC++,跨平台,Linux下选择空项目。当把Edison作为对象时,请确保将您的解决方案平台设置为x86。向项目中添加一个C++文件,并使用intel下的Grove的温度示例代码。UPM库是默认使用在Edison上的Yocto Linux图像的一部分,所以没有额外的安装步骤去获取它们。您应该像示例中一样去更改include语句,并且正确引用它们的位置,如下所示:

 #include <upm/grove.h>

这一改动之后,您就可以准备编译和运行您的代码。在这里你可以看到在Visual Studio的调试模式下的示例输出。如果您想知道从这种类型的传感器的第一次所读取数据的第一个行输出通常不是太好。

要启用智能提示,按照以上的说明从Edison中拷贝您包含的本地文件。现在,我们有一个智能提示的bug会影响示例,它在未来的更新中将会被修复。

在未来的博客里,我们将进一步使用这个示例代码连接到Azure loT Hub)

更改

我们总是在对Linux扩展的Visual Studio库页面上发布我们更改日志,除了最初的发行的版本以外,这里有所有完整的日志。

6/6/2016 1.0.3

  •  添加一个控制台I/O工具窗口与VS发起远程进程进行交互
  • 添加调试过程对工作目录和命令行参数的支持
  • 添加使用工程文件夹之外文件的功能
  • 系统信息(OS/体系结构)的UI工具——选项
  • C++14对智能感应支持的错误修复
  •  连接到Linux对话框UI错误修复
  • 添加错误修复后,Linux的连接用户界面删除连接
  • 修复对上传只读文件拒绝访问的修复
  • 修复-x c,-x c++错误和将其编译为C
  • FreeBSD(是一种UNIX操作系统), OSX(苹果公司为Mac系列产品开发的专属操作系统)的部分支持,其中包括连接,编译,链接。但目前还不支持调试。
  •  性能改进

4/14/2016 v1.0.2

  •  删除对Android NDK和Android MDD位的依赖
  • 对Intel Edison支持和错误修复
  • 修复以root身份登陆
  • 修复随机的 “4444端口的使用”问题
  •  修复”no such file“错误
  • 在属性页中的本地和远程端口不再是相互依赖的,并且每一个可以被单独提供
  • 修复从Linux连接管理器来整体移除条目的问题。
  • 资源管理器(泄露sshd进程)修复
  • 在连接对话框中的常规的健壮性修复
  • 在调试结束后Gdbserver的清除
  • 改进编译诊断和解析编译的链接器错误
  • 修复清空文件的扩展名的输出,现在输出可以没有扩展名

4/4/2016 v1.0.1

  • 修复在登陆时崩溃问题