vs2017搭建linux c++开发环境
最近一直在阅读ovs的源码,看到用户态代码的时候,需要对用户态的代码进行调试,一开始想直接使用linux中的GDB进行调试,但是ovs的工程太过于复杂,从网上找了些文章,发现vs2017能够支持linux c++程序的调试,捣鼓了一下午,遇到了一些坑,终于搭建好了开发环境。
最新版的vs 2017支持linux环境编程,与传统vs上的windows编程不同的是,vs2017 所需要的Linux环境需要搭载在一个linux的服务器上,vs 2017 相当于将windows系统和这个linux系统之间建立了某种映射,可以将代码复制到linux中对应的目录中,并且windows系统中的vs 2017能够看到运行的情况,甚至是对代码进行断点调试。
开发环境
window 10操作系统,vs 2017 community版,VMware12.5.7
在VMware中安装ubuntu14桌面版
vs 2017的安装
官网下载地址https://visualstudio.microsoft.com/zh-hans/?rr=https%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2F
从官网下载最新的vs 2017,在安装的过程中需要注意,如果你需要搭建linux c++环境,需要勾选“使用c++的linux开发”工具集,见下图

配置ubuntu环境
在ubuntu中安装好c++环境,因为vs 2017需要通过ssh登陆ubuntu系统,所以也需要安装好ssh服务,命令如下:
sudo apt-get install openssh-server g++ gdb gdbserver
开始ssh服务:
sudo service ssh start
vs2017创建linux项目
打开vs2017,步骤如下,文件-->新建项目-->跨平台-->linux->控制台应用程序(linux)

新建完成项目之后,vs2017自动生成一个简单的maic.cpp文件
菜单栏选择 调试->cross platform->add 将刚才建立的Ubuntu服务器用户信息输入进去

右键解决方案,可以看到当前程序的属性页面,点击配置属性->常规->远程生成计算机,选择刚刚新建的账户,可以看到,在该页面下,默认的远程生成根目录在"~/projects"下面,待会儿可以看到在ubuntu对应的目录下会生成项目的代码。

菜单栏选择调试->Linux Console打开linux程序的控制台

可以在程序中打断点,点击调试按钮进行运行,可以看到控制台打印出信息

登陆ubuntu,在~/projects目录下面可以看到新生成的项目文件夹“test”

遇到问题
上述是一个简单的开发演示,在实际的工作中,代码可能很复杂。因为这几天在学习linux的IO多路复用机制,从网上找了一个稍微复杂的通信程序,代码来自于博客https://www.cnblogs.com/Anker/p/3261006.html,源代码有一处错误,需加上#include <arpa/inet.h>。这个程序的功能是客户端向服务器发送信息,服务器接收输出并原样发送回给客户端,客户端接收到输出到终端。其中使用一些linux中的库文件。
问题1 无法找到库文件
在博客https://www.cnblogs.com/xylc/p/6533716.html?&from=androidqq 看到一个解决方法,将ubuntu下面/usr/include、/usr/local/include等目录复制到vs的linux header path(在我的机器中,地址为C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr)。
问题2 gdbserver模式无法使用
vs2017进行调试有两种方式,gdb和gdb-server,可以在菜单栏 调试->配置属性->调试->调试模式中进行配置,关于这两种模式的不同,官方文档的解释如下:
- 在“gdbserver”模式中,GDB 在本地运行,连接到在远程系统上运行的 gdbserver。 请注意,这是 Linux 控制台窗口唯一支持的模式。
- 在“gdb”模式中,Visual Studio 调试器驱动远程系统上的 GDB,如果 GDB 的本地版本与目标计算机上安装的版本不兼容,则远程系统上的 GDB 更易兼容。 |
从网上找了很多的资料,重新更新了ubuntu中的gdbserver,结果还是不行,因为我之前使用的是ubuntu17的server版本,无奈使用ubuntu14的桌面版,问题立马得到解决,目前仍然不知道gdbserver模型为什么无法使用,如果有路过的大神看到,希望评论区可以留言。
问题3 错误Stopped (tty input)
在运行gdb模式下运 行客户端的时候,客户端从控制台接受数据的那一段代码报Stopped (tty input)错误,通过看官方文档发现gdb模式不支持控制台交互,改成gdbserver模式后能正常使用。
最终运行结果
最终成功运行服务端和客户端程序,先启动服务端,再运行客户端,下图中分别为服务端和客户端运行情况。当客户端再控制台输入信息,服务端能接收,并回传给客户端在控制台显示。


参考资料
部署、运行和调试 Linux 项目
使用Visual Studio 2017作为Linux C++开发工具
作者:yearsj
转载请注明出处:https://www.cnblogs.com/yearsj/p/9600682.html
segmentfault对应博文:https://segmentfault.com/a/1190000016300215
vs2017搭建linux c++开发环境的更多相关文章
- DELPHI 10.2 TOKYO搭建LINUX MYSQL开发环境
DELPHI 10.2 TOKYO搭建LINUX MYSQL开发环境 笔者使用ubuntu64位LINUX 首先必须保证LINUX可以连互联网. 安装MYSQLsudo apt-get update ...
- 为.NET搭建Linux的开发环境,鄙视那些将简单事情复杂化的人
写在前面的吐槽 原本跨平台开发很容易的事情, 很多人把它弄得很麻烦,给外人的感觉:你们.NET跨平台开发好不成熟,好麻烦哦. ..................................... ...
- [图文教程]VS2017搭建opencv & C++ 开发环境
首先从官网下载OpenCV最新版本 截至我写这文章,4.0已经发布预览版了,不过在这是没有的,只能用3.4.2: https://opencv.org/releases.html 一:安装 安装过程不 ...
- visual studio 2017搭建linux c++开发环境
https://blog.csdn.net/cekonghyj/article/details/77917433 https://blog.csdn.net/norsd/article/details ...
- Linux PC开发环境搭建建议
搭建Linux PC开发环境 很早之前整理的在Linux(ubuntu)系统下搭建 PC开发环境的工具的推荐和简单说明,尽管现在有些已经不再使用,但还是要备份一下,作为以后的参考: package: ...
- windows和linux中搭建python集成开发环境IDE——如何设置多个python环境
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- 【转】windows和linux中搭建python集成开发环境IDE
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- win10子系统linux.ubuntu开发环境搭建
移步新博客... win10子系统linux.ubuntu开发环境搭建
- LINUX下搭建JAVA的开发环境
LINUX下搭建JAVA的开发环境 (2009-07-13 10:04:13) 下面就将Linux下JAVA开发环境的搭建详细道来: 1.Linux下JDK的安装 至于下载JDK的二进制可执行 ...
随机推荐
- Oracle 实例管理
理解初始化参数文件实例由内存中构建它的参数来定义.许多参数(但不是全部)可以在启动后更改.有些参数在启动时就固定了,只能在关闭实例并再次启动时更改. 静态和动态参数文件参数文件由两类:静态参数文件(也 ...
- case when then else end 与 decode 的区别
case when then else end : 条件可以有 等于 ,大于 ,小于 与 decode : 条件只可以有等于的.
- Token ,Cookie和Session的区别
在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解. Cookie cookie 是一个非常具体的东西,指的就是浏 ...
- Python的迭代器与装饰器
'''迭代器:两个基本方法:iter()和next()迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合等第一个元素开始访问,直到所有的元素被访问结束,迭代器只能往前不会后退. 迭代器有两个基本 ...
- html网站meta标签大全
案例 一.天猫 <meta charset="utf-8"> <title>天猫TMALL</title> <meta name=&quo ...
- JS变量、作用域、内存
写到这个题目<JS变量.作用域,内存>,我就不由自主想起了黄金三嫖客.可能是名字有点像,嗯,一定是这样子的! JS接触下来,应该是要比Java简单不少的,所以,要学好啊.立个flag半年后 ...
- 基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用
基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用 前言 在目前大数据时代背景之下,数据可视化的需求也变得越来越庞大,在数据可视化的背景之下,通过智能机器间的链接并最终将人机链接 ...
- 任意flex控件导出图片
任意flex控件导出图片 flex导出图片功能通常是: 思路1:客户端将UIComponent转化为BitmapData,再转为ByteArray,将ByteArray上传到服务端,服务端发送文件 ...
- 20155203 实验一《Java开发环境的熟悉》实验报告
20155203 实验一<Java开发环境的熟悉>实验报告 一.实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 二.练 ...
- 2016-2017-2 20155302 实验四 Android 开发基础
2016-2017-2 20155302 实验四 Android 开发基础 实验内容 1.下载和安装Android Studio 2.学会使用Android Studio进行简单的Android开发 ...