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

news2025/1/18 4:51:56

使用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

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

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

相关文章

电脑蓝牙在哪里打开?1分钟轻松打开蓝牙!

“我在操作电脑的时候想将电脑的蓝牙打开来连接音响和键盘,但是不知道电脑蓝牙应该如何打开,有什么比较简单的方法吗?” 随着无线技术的日益发展,蓝牙已成为连接各种设备的重要桥梁。无论是传输文件、音频还是与外部设备进行通信&…

YOLO学习中的琐碎知识点

目录 一、导入的库 二、名词介绍 (1)pytorch张量 (2)边界框(bounding box) 三、pycharm操作 (1)参数设置 四、文件认识 五、YOLO如何训练自己的模型 一、导入的库 import to…

笔记本Win 10系统查看电池健康状况

博主最近换了个笔记本电池,之前的电池容量明显变小了很多,而且出现了轻微鼓包的情况。所以用gpt问了一下怎么用系统的方法查看电池情况。 在Windows 10系统中,您可以通过以下步骤来查看笔记本电脑电池的健康状况: 打开命令提示符&…

神经网络系列---归一化

文章目录 归一化批量归一化预测阶段 测试阶段γ和β(注意)举例 层归一化前向传播反向传播 归一化 批量归一化 (Batch Normalization)在训练过程中的数学公式可以概括如下: 给定一个小批量数据 B { x 1 , x 2 , … …

线程普通任务执行流程

(1)先判断是否存在空闲线程,存在直接分配,不存在执行(2); (2)判断工作线程数量小于核心数量,未超出创建核心线程执行线程任务,超出执行&#xff…

为什么会员模式是一种明智的扩张方式

会员模式看起来是一种有趣、令人兴奋且很酷的业务发展方式,但当您真正深入研究时,您可能会惊讶地发现它远不止于此。 会员资格为我们提供了一条道德扩展的途径。我们可以就地为客户提供服务。 这就是为什么会员模式可能成为您企业的下一步,…

LeetCode 热题 100 | 二叉树(一)

目录 1 基础知识 1.1 先序遍历 1.2 中序遍历 1.3 后序遍历 2 94. 二叉树的中序遍历 3 104. 二叉树的最大深度 4 226. 翻转二叉树 5 101. 对称二叉树 菜鸟做题,语言是 C 1 基础知识 二叉树常见的遍历方式有: 先序遍历中序遍历后序遍历…

LeetCode | 寻找两个正序数组的中位数 Python C语言

Problem: 4. 寻找两个正序数组的中位数 文章目录 思路解题方法Code结果结果一些思考 思路 先合并,后排序,最后找中间轴。 解题方法 由解题思路可知 Code 这是python3的代码。 class Solution:def findMedianSortedArrays(self, nums1: List[int], …

微服务知识02

1、九大高并发解决方案 2、系统架构图​​​​​​​ 3、分布式事务 本地事务、分布式事务 操作不同服务器的数据库(垂直分库) 4、分布式事务解决方案(没有seata之前) (1)XA协议(强一致性&a…

STM32单片机基本原理与应用(八)

温度传感器实验 实验内容: 单片机通过代码模拟1-Wire总线并对DS18B20进行读写,并在TFTLCD屏幕上显示当前实时温度。 电路原理图: 1-Wire总线 1-Wire总线:即单总线协议,采用单根信号线,既传输时钟&#…

深度学习基础(一)神经网络基本原理

之前的章节我们初步介绍了机器学习相关基础知识,目录如下: 机器学习基础(一)理解机器学习的本质-CSDN博客 机器学习基础(二)监督与非监督学习-CSDN博客 机器学习基础(四)非监督学…

python jupyter notebook打开页面方便使用

如果没安装jupyter, 请安装: pip install jupyter notebook 运行jupyter notebook jupyter-notebook

【SpringBoot】Spring常用注解总结

目录 ⭐spring springmvc和springboot的区别 Autowired 和Resource的区别和联系 1. SpringBootApplication 2. Spring Bean 相关 2.1. Autowired 2.2. Component,Repository,Service, Controller 2.3. RestController 2.4. Scope 2.5. Configuration 3. 处理常见的 HT…

利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

红队攻防之powershell上线基础免杀(一)

不努力,你背井离乡干嘛?当卧底啊 环境为win10,在哥斯拉生成的webshell下,执行powershell命令。 测试杀毒软件为:火绒,腾讯电脑管家 哥斯拉生成php文件的webshell 如图 哥斯拉进行连接 把要执行命令的文件…

[树形DP] 树的最大独立集

题目 这个挺简单的&#xff0c;注意状态转移时&#xff0c;如果选这个点&#xff0c;那么它的子结点状态应该为不选&#xff0c;如果这个点的状态是不选&#xff0c;那么可以在它的子结点里选择&#xff1a;选/不选两个状态&#xff0c;所以最后结果是max挑选。 #include<b…

业务流程管理系统(BPMS):一文掌握,组织业务流程优化必备。

大家好&#xff0c;我是大美B端工场&#xff0c;本期继续分享商业智能信息系统的设计&#xff0c;欢迎大家关注&#xff0c;如有B端写系统界面的设计和前端需求&#xff0c;可以联络我们。 一、什么是BPMS系统 BPMS是Business Process Management System&#xff08;业务流程管…

Java面试:Spring Cloud Alibaba

文章目录 引言I Spring Cloud Alibaba1.1 配置文件加载的优先级(由高到低)1.2 注册中心1.3 rpcII 高并发场景:缓存穿透/缓存失效/雪崩如何解决2.1 缓存穿透2.2 缓存击穿(失效)2.3 缓存雪崩引言 微服务涉及的中间件分布式事务事务的传播方式事务的隔离级别缓存穿透/缓存失效…

基于springboot+vue的校园社团信息管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

代码随想录算法训练营第三天

● 自己看到题目的第一想法 203.移除链表元素 方法一&#xff1a; 思路&#xff1a; 设置虚拟头节点 dummyhead 设置临时指针 cur 遍历 整个链表 循环&#xff1a; 如果 cur !nullptr &&cur->next !nullptr 则 遍历链表 否则结束遍历 如果 cur->next val 则…