130 如何通过vs2017开发linux c++程序

使用VS2017开发linux下的应用程序(C/C++)_vc_linux.exe vs2017-CSDN博客

参考上面这哥们的,写的很详细

前言


本文章记录如何使用VS2017进行linux应用程序的开发(针对新手小白),VS2017能较为方便的通过SSH编辑并远程调试linux系统上的程序,大致开发流程如下:
1、在windows系统的VS2017上编辑代码;
2、VS2017通过SSH将代码传送到虚拟机Linux系统上进行编译、链接;
3、调用Linux系统上的GDB调试程序,并将调试过程中的状态同步至windows系统端的VS2017;

提示:以下是本篇文章正文内容,下面案例可供参考

一、本文使用的软件及环境:


1、集成开发工具:VS2017;
2、虚拟机:VMware Workstation 15 Pro;
3、linux系统ubuntu14.04。

二、使用步骤


1.前期准备


1.1 VS2017安装


安装就不细讲,可以百度详细步骤,注意在安装时勾选“使用C++的Linux开发”工具集,如下图所示:

1.2 linux系统上安装SSH、gdb等工具

1.2.1 安装

在ubuntu14.04下,安装好openssh-server/g++/gdb/gdbserver
代码如下(示例),可以一行一次性安装,可以一次执行一行命令。

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

安装好以上工具之后,检查ubuntu是否已经开启了SSH服务,代码如下

ps -e |grep ssh

如果看到sshd那说明ssh-server已经启动了,如果没有则可以这样启动:

sudo /etc/init.d/ssh start

ssh-server配置文件位于/ etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。
然后重启SSH服务

sudo /etc/init.d/ssh stop
sudo /etc/init.d/ssh start

关于SSH的开启和设置请参阅以下链接:


ubuntu开启SSH服务

1.2.2 修改ssh允许root用户登录

修改ssh登录的配置,即/etc/ssh/sshd_config文件,修改为允许root登录,(如果只想用普通用户登陆可以不用修改,但是那样程序的调试运行会受限于普通用户权限),代码如下:

sudo vim /etc/ssh/sshd_config

进入vim编辑,用方向键向下滚动找到PermitRootLogin这项,改为 PermitRootLogin yes
 

重启ssh服务来让修改生效

sudo service ssh restart

1.3 VMware15下配置Ubuntu14.04静态IP


由于VS2017是通过SSH远程传输代码至ubuntu14.04上,传输时需要配置IP、端口等,每次开启虚拟机,ubuntu系统的IP有可能不一样,有几率需要重新配置SSH的IP和端口等,因此将ubuntu配置成静态IP上网是有必要的,详细步骤请参阅以下链接内容:

为VMware虚拟机内安装的Ubuntu 16.04设置静态IP地址

配置好静态IP后,可以通过打开windows的CMD终端,看能否ping通刚才设置的ubuntu14.04系统的静态IP

2.使用VS2017创建linux应用程序项目

2.1 新建名为“TestRPC”的解决方案

2.2 配置SSH的IP地址、端口、ubuntu系统用户名、ubuntu系统登录密码

1、点击Debug按钮。

2、输入IP地址、端口,用户名、密码信息,点击连接,即可远程登录ubuntu系统,VS2017会传输代码至ubunt系统上进行编译、链接和调试。
 

3、后续如果需要更改SSH的配置信息,可依次选择VS2017菜单栏的“工具”——>“选项”——>“跨平台”——>“连接管理”;在其中点击添加和删除SSH远程连接。见下图
 

4、可通过依次选择VS2017菜单栏的“调试”——>“linux控制台“ 来打开linux的控制台窗口,观察程序打印输出,如下图:
 

2.3 ubuntu系统下的头文件导入到VS2017相应目录 (我自己在实际操作中并没有做这一步

因为我们是在VS2017上编辑的代码,我们需要使用的C/C++以及ubuntu上安装的第三方库的头文件(.h文件)都在ubuntu系统目录:usr/include 和 usr/local/include 下,因此需要将这两个目录复制到VS2017相应目录中,如下(示例):

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

到这里我们能开发简单的程序了,但是还无法使用第三方的库来开发我们的应用程序,还需要对项目进行配置。

3.项目属性配置

1、接下来讲述项目如何配置和使用第三方库,这里以使用libevent搭建RPC的服务端程序为例;先打开项目属性对话框。

3.1 “常规”配置

这里进行远程生成根目录和远程生成项目目录的设置(此处可以使用默认的目录,读者若需要更改ubuntu系统上存储此项目的目录则继续看,若无需更改,则可跳过3.1小节),点击远程生成根目录右侧下拉按钮,然后点击编辑。
 

2、输入:/home/kiro/projects 然后点击确定,这个目录会在ubuntu系统中生成;这里大家可以根据自己的目录来设定,不能设置到root目录,否则会弹出没有权限创建目录的错误。
 

注:此处大家可以点击右下角的宏,然后在其中选择合适的宏名称,如$(RemoteRootDir),这个宏对应的目录就是~/projects ,如下图所示
 

3、点击远程生成项目目录右侧下拉按钮,然后点击编辑,输入:

/home/kiro/$(ProjectName)

然后点击确定,并点击应用,这个目录会在ubuntu系统中生成;这里大家可以根据自己的目录来设定,不能设置到root目录,否则会弹出没有权限创建目录的错误。最终配置结果如下图:
 

3.2 “链接器”配置

1、这里我们需要配置“附加库目录”,它的作用是告知编译器我们要使用的第三方库的动态链接文件和静态链接文件所在的目录(这里是指ubuntu系统中对应目录)。

2、我们点击“附加库目录”,点击右侧的下拉选择按钮,然后点击编辑,输入:/usr/lib/x86_64-linux-gnu 我所要使用的第三方库libevent的目录是在/usr/lib/x86_64-linux-gnu目录下,大家可以根据自己的实际情况进行编辑。如下图:
 

3、然后我们选择链接器下的“输入”选项进行“库依赖项”配置,(它的作用是告知编译器,我们所用到的第三方库的动态链接库和静态链接库的名字)。
 

4、我们点击“库依赖项”,点击右侧的下拉选择按钮,然后点击编辑,输入:event 这里我使用的的第三方库是libevent,其动态链接库和静态链接库的名字是libevent.a、libevent.so,此处我们不需要前缀“lib”和后缀“.a和.so”,只需要指明“event”。

4.运行项目

总结

以上就是今天讲述的内容,主要讲述简单使用VS2017开远程开发linux应用程序,并给出了使用第三方库的配置过程实例,关于自定义开发动态链接解决方案和静态链接解决方案实例见以下博主博文:
VS2017环境下开发Linux程序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_42602434/article/details/109138157

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强大的文本绘图——PlantUML

PlantUML是一款开源工具,它允许用户通过简单的文本描述来创建UML图(统一建模语言图)。这种方法可以快速地绘制类图、用例图、序列图、状态图、活动图、组件图和部署图等UML图表。PlantUML使用一种领域特定语言(DSL)&am…

【Java程序设计】【C00282】基于Springboot的校园台球厅人员与设备管理系统(有论文)

基于Springboot的校园台球厅人员与设备管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园台球厅人员与设备管理系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xf…

【可申请试用】RT-Thread专业版全面支持瑞芯微RK3568系列平台并可实现混合部署...

RT-Thread 专业版是面向任务关键领域的高安全实时操作系统,已被广泛应用于航空航天,电力,轨交,车载,工业控制,新能源,医疗等国家重要领域,是各领域高可靠装备的基础核心软件。该版本…

C#,计算几何,计算机图形学(Computer Graphics)洪水填充算法(Flood Fill Algorithm)与源代码

1 泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法(Flood Fill Algorithm) ,又称洪水填充算法,是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows 自带画图软件的油漆桶功能。 2 源程序 using System; using System.Collecti…

基于PostGIS的慢查询引起的空间索引提升实践

目录 前言 一、问题定位 1、前端接口定位 2、后台应用定位 3、找到问题所在 二、空间索引优化 1、数据库查询 2、创建空间索引 3、geography索引 4、再看前端响应 总结 前言 这是一个真实的案例,也是一个新入门的工程师很容易忽略的点。往往在设计数据库的…

【JVM】Java中SPI机制

打破双亲委派模型中提到SPI和JDBC相关内容,那么是如何打破双亲委派模型呢?本文进行一个讲解,在开始讲解之前,我们需要先了解Java中的SPI机制 是什么 SPI 全称Service Provider Interface,是 Java 提供的一套用来被第三方实现或…

《TCP/IP详解 卷一》第6章 DHCP

目录 6.1 引言 6.2 DHCP 6.2.1 地址池和租用 6.2.2 DHCP和BOOTP消息格式 6.2.3 DHCP和BOOTP选项 6.2.4 DHCP协议操作 6.2.5 DHCPv6 6.2.6 DCHP中继 6.2.7 DHCP认证 6.2.8 重新配置扩展 6.2.9 快速确认 6.2.10 位置信息(LCI和LoST) 6.2.11 移…

股票量化系统QTYX“单针探底”迎战A股V型反转|24年2月春节后第一周记录

前言 “实战案例个股画像”系列和大家分享我基于QTYX选股框架,在实战中选股的案例,和大家一起见证QTYX选股框架逐步完善的过程,帮助大家理解QTYX的精髓。 关于QTYX的使用攻略可以查看链接:QTYX使用攻略 关于QTYX初衷和精髓可以查看…

【计算机毕业设计】541鲜花商城系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Unity 2021.3发布WebGL设置以及nginx的配置

使用unity2021.3发布webgl 使用Unity制作好项目之后建议进行代码清理,这样会即将不用的命名空间去除,不然一会在发布的时候有些命名空间webgl会报错。 平台转换 将平台设置为webgl 设置色彩空间压缩方式 Compression Format 设置为DisabledDecompre…

Java 学习和实践笔记(19):this的使用方法

this用来指向当前对象的地址。 this的用法: 1)在普通方法中,this总是指向调用该方法的对象。在普通方法中,它是作为一种隐式参数一直就存在着(这句话的意思,就是其实在普通方法中,编译器一直就…

Word第一课

文章目录 1. 文件格式1.1 如何显示文件扩展名1.2 Word文档格式的演变1.3 常见的Word文档格式 3. 文档属性理解文档属性查看文档属性 4. 显示比例方式一: 手动调整方式二: 自动调整 5. 视图、窗口视图 1. 文件格式 1.1 如何显示文件扩展名 文档格式指的…

Vue2页面转化为Vue3

vue2element-ui转化为Vue3element plus 后台管理系统&#xff1a;增删查改 vue2页面&#xff1a; <template><div class"app-container"><div><el-form:model"queryParams"ref"queryForm"size"small":inline&qu…

【人脸朝向识别与分类预测】基于LVQ神经网络

课题名称&#xff1a;基于LVQ神经网络的人脸朝向识别分类 版本日期&#xff1a;2024-02-20 运行方式&#xff1a;直接运行GRNN0503.m文件 代码获取方式&#xff1a;私信博主或 企鹅号:491052175 模型描述&#xff1a; 采集到一组人脸朝向不同角度时的图像&#xff0c;图像…

刷题日记-Day2- Leedcode-977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II-Python实现

刷题日记Day2 977 有序数组的平方209. 长度最小的子数组59. 螺旋矩阵 II 977 有序数组的平方 链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组…

【Git】:初识git

初识git 一.创建git仓库二.管理文件三.认识.git内部结构 一.创建git仓库 1.安装git 使用yum install git -y即可安装git。 2.创建仓库 首先创建一个git目录。 3.初始化仓库 这里面有很多内容&#xff0c;后面会将&#xff0c;主要是用来进行追踪的。 4.配置name和email 当然也…

【MySQL系列 04】深入浅出索引

一、索引介绍 提到数据库索引&#xff0c;相信大家都不陌生&#xff0c;在日常工作中会经常接触到。比如某一个 SQL 查询比较慢&#xff0c;分析完原因之后&#xff0c;你可能就会说“给某个字段加个索引吧”之类的解决方案。 但到底什么是索引&#xff0c;索引又是如何工作的…

【python】yolo目标检测模型转为onnx,及trt/engine模型的tensorrt轻量级模型部署

代码参考&#xff1a; Tianxiaomo/pytorch-YOLOv4: PyTorch ,ONNX and TensorRT implementation of YOLOv4 (github.com)https://github.com/Tianxiaomo/pytorch-YOLOv4这个大佬对于各种模型转化写的很全&#xff0c;然后我根据自己的需求修改了部分源码&#xff0c;稍微简化了…

Linux:ACL权限,特殊位和隐藏属性

目录 一.什么是ACL 二.操作步骤 ① 添加测试目录、用户、组&#xff0c;并将用户添加到组 ② 修改目录的所有者和所属组 ③ 设定权限 ④ 为临时用户分配权限 ⑤ 验证acl权限 ⑥ 控制组的acl权限 三. 删除ACL权限 一.什么是ACL 访问控制列表 (Access Control List):ACL 通…

项目管理:如何成功完成一个项目

项目管理是一项重要的技能&#xff0c;它可以帮助你成功地完成一个项目。以下是一些关键的步骤&#xff0c;可以帮助你实现这一目标&#xff1a; 1. 明确项目目标&#xff1a;在开始项目之前&#xff0c;你需要明确项目的目标。这将有助于你制定一个明确的计划&#xff0c;并确…