专栏首页Eureka伽罗的技术时光轴VS2017开发Linux平台上的程序

VS2017开发Linux平台上的程序

重装系统后安装VS2015时卡住了,于是试试看VS2017怎样,听说还支持调Linux。发现VS2017跟12/13/15又有了新的飞跃,竟然支持模块化下载,对于我这种主要写C++简直是个福音,勾了Linux C++和MFC后,C盘+D盘也才6G,比起VS2015只额外勾MFC就有10G来说轻了这么多!

VS2017只有在线安装包,寝室里下载不到10分钟就搞定了,迫不及待地新建项目

哇擦,终于没有了微软地一堆.NET系列了!

然后现在就开始配置跨平台Linux开发环境,按照官网教程

https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-development/

我的Linux是Ubuntu 16.04,微软支持14.04和16.04,所以可以使用。首先为了支持远程调试,Linux那边需要安装一些服务

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

这里我一开始发现Linux不能联网,原来是之前在实验室里设置了静态IP,回寝室后,由于这个静态IP和寝室的路由器支持IP不是一个网段,导致需要重新修改IP跟主机一个网段。具体参见之前的博客 虚拟机Linux桥接模式下设置静态IP

新建一个Linux控制台项目,VS主页会有教程,于是迫不及待地写了份使用POSIX线程库的代码

#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <pthread.h>

void* thread_func(void* arg)
{
    printf("线程函数: %s\n", static_cast<char*>(arg));
    return nullptr;
}

int main()
{
    pthread_t tid;
    int errnum = pthread_create(&tid, nullptr, thread_func,
        const_cast<char*>("Hello Linux!"));
    if (errnum != 0) {
        fprintf(stderr, "pthread_create error: %s\n", strerror(errnum));
        exit(1);
    }

    errnum = pthread_join(tid, nullptr);
    if (errnum != 0) {
        fprintf(stderr, "pthread_join error: %s\n", strerror(errnum));
        exit(1);
    }

    return 0;
}

使用POSIX线程时,编译选项需要加上-pthread,于是在菜单:调试->HelloLinux属性(这里HelloLinux是项目名称)中修改命令行参数

既然是远程调试,那么自然需要远程连接了,写好代码后菜单:调试->生成解决方案(快捷键F7)后,会自动弹出连接框(端口号是22,即SSH连接,所以刚才才需要在Linux上安装openssh-server)

在菜单:工具->选项->跨平台中,也可以看到远程连接地信息

编译会出错,提示找不到pthread_create和pthread_join,但是我加了-pthread编译选项啊?原因是VS没有自动把Linux的头文件包含进来,因此需要手动把Linux系统的/usr/include、/usr/local/include目录复制到VS的linux头文件路径下,我的VS安装路径把默认的C盘改成了D盘,于是目录就是下面这个

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr

然后要添加该目录到VS的头文件目录下

然后程序参数也要修改

之后就是F7组建、F5调试了,注意要在控制台显示结果必须打开Linux控制台(菜单:调试-Linux控制台)

结果如图,程序运行成功了,但是中文字符乱码,原因是VS2017默认编码模式并不是UTF-8,这里需要安装插件

菜单:工具->扩展与更新->联机,搜索UTF找到最顶上这个插件,下载

之后重启VS,重新生成解决方案->开始调试,依然乱码。原因是更改了UTF-8之后,原来代码中的中文没有自动转换成UTF-8编码,但是显示的还是中文而非乱码,所以需要把中文部分全部删除然后再次键入,之后就成功了

锵~锵~除了远程连接有点耗时间外,其余还是很满意的,VS大法好!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 优化Linux bootloader速度的究极之路:从GRUB到EFI Stub

    Linux著名的GRUB已立n代,2.0以后已经是最受欢迎的bootloader,很多Linux发行版都用它作为缺省的bootloader。GRUB2功能强大,...

    战神伽罗
  • 在gcc中使用intel风格的内联汇编

    很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后的内联汇编就可以用intel风格了,构建可执行文件时给gcc加上...

    战神伽罗
  • Ubuntu 16.04通过APT源安装QUEM虚拟机调试Linux内核

    安装中基本不会出现依赖的问题,如果出现了,可以使用sudo apt-get install -f去解决,然后重新运行安装命令。

    战神伽罗
  • 32bit-Docker跑32bit-Ubuntu14.04

    AlicFeng
  • 轻量级容器Docker起步

    image.png 目标 安装并启动Docker服务,下载一个ubuntu的基础镜像,启动容器,在容器中输出 ‘hello world’ 安装 Docker需...

    dys
  • 分布式概念-中心化副本控制机制

    前面的文章提到过副本是分布式系统中提升数据可用性,数据容错性,以及读吞吐的主要方式,对于多个副本数据一致性处理就是比较复杂且重要的话题。

    春哥大魔王
  • LabelImg使用方法

    LabelImg is a graphical image annotation tool.

    于小勇
  • H3C IPSEC OVER GRE配置

     rule 10 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.25...

    py3study
  • CentOS+Ubuntu+Windows 多系统Grub引导修复

    简单描述状况: 1.系统安装有64位的windows 7和64位的CentOS操作系统,使用Legacy BIOS 安装引导启动,没有使用UEFI。 2.C...

    gigiwangs
  • Buck

    Facebook Buck 是个构建系统,以Google的内部构建系统 blaze为模型,它是由前Google, 现Facebook工程师开发并在Github上...

    用户3004328

扫码关注云+社区

领取腾讯云代金券