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

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

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

相关文章

公司数据迁移,服务器小文件多复制慢解决方案

企业普遍面临一个挑战:如何高效地处理和移动大量的小型文件。这些文件虽然单个体积不大,但数量庞大,累积起来会占据极大的存储空间,而且在迁移过程中,复制这些文件的速度往往非常缓慢。这不仅影响了企业的运营效率&…

10-pytorch-完整模型训练

b站小土堆pytorch教程学习笔记 一、从零开始构建自己的神经网络 1.模型构建 #准备数据集 import torch import torchvision from torch.utils.tensorboard import SummaryWriterfrom model import * from torch.utils.data import DataLoadertrain_datatorchvision.datasets.…

如何运用Mybatis Genertor

MyBatis Generator是一个MyBatis的代码生成器,它可以帮助我们快速生成Mapper接口以及对应的XML文件和模型类。在Java开发中,能大大提升开发效率。本文将介绍如何在IntelliJ IDEA中使用MyBatis Generator。 1. 添加MyBatis Generator依赖 我们首先需要在…

计网 - 深入理解HTTPS:加密技术的背后

文章目录 Pre发展历史Http VS HttpsHTTPS 解决了 HTTP 的哪些问题HTTPS是如何解决上述三个风险的混合加密摘要算法 数字签名数字证书 Pre PKI - 数字签名与数字证书 PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 发展历史 HTTP(超文本传输协…

代码随想录算法训练营第二十五天补|216.组合总和III ● 17.电话号码的字母组合

组合问题:集合内元素的组合,不同集合内元素的组合 回溯模板伪代码 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtrackin…

人工智能绘画的时代下到底是谁在主导,是人类的想象力,还是AI的创造力?

#ai作画 目录 一.AI绘画的概念 1. 数据集准备: 2. 模型训练: 3. 生成绘画: 二.AI绘画的应用领域 三.AI绘画的发展 四.AI绘画背后的技术剖析 1.AI绘画的底层原理 2.主流模型的发展趋势 2.1VAE — 伊始之门 2.2GAN 2.2.1GAN相较于…

深度学习系列60: 大模型文本理解和生成概述

参考网络课程:https://www.bilibili.com/video/BV1UG411p7zv/?p98&spm_id_frompageDriver&vd_source3eeaf9c562508b013fa950114d4b0990 1. 概述 包含理解和分类两大类问题,对应的就是BERT和GPT两大类模型;而交叉领域则对应T5 2.…

【C++精简版回顾】9.static

1.static修饰成员类型 1.类外初始化&#xff0c;初始化时不需要static修饰(不能修饰)&#xff0c;要有类名限定 2.静态成员是属于类的&#xff0c;全对象公有 1.class class MM { public:MM(string name) {size;a size;this->name name;}void print() {cout << &quo…

瑞_23种设计模式_桥接模式

文章目录 1 桥接模式&#xff08;Bridge Pattern&#xff09;1.1 介绍1.2 概述1.3 桥接模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二2.1 需求2.1 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《23种设计模式》的桥接模式篇。本文中的部分图和概念等资料…

【MySQL】连接查询和自连接的学习和总结

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-x4sPmqTXA4yupW1n {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

限流算法

下面对常见的限流算法进行讨论。目前&#xff0c;常用的限流算法主要有三种&#xff1a;计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。 1. 计数器法 计数器法是通过计数对到来的请求进行选择性处理。如系统限制一秒内最多有X个请求&#xff0c;则在该…

《艾尔登法环 黄金树幽影》是什么?Mac电脑怎么玩《艾尔登法环》艾尔登法环下载

全体起立&#xff0c;《艾尔登法环 》最新DLC《黄金树幽影》将在6月21日发布&#xff0c;steam售价198元&#xff0c;现在就可以预订了。宫崎英高在接受FAMI通的采访时表示&#xff0c;新DLC的体量远超《黑暗之魂》和《血源诅咒》资料片。好家伙&#xff0c;别人是把DLC续作&am…

IO进程线程:通信

1.定义互斥锁 #include<myhead.h>int num520;//临界资源//1.创建一个互斥锁变量 pthread_mutex_t mutex;//定义任务&#xff11;函数 void *task1(void *arg) {printf("11111111111111\n");//3.获取锁资源pthread_mutex_lock(&mutex);num1314;sleep(3);pr…

EasyRecovery 16数据恢复软件功能介绍及2024 年最新easyrecover激活密钥?

EasyRecovery Photo16 for windows数据恢复软件免费版下载是一款由Kroll Ontrack公司开发的数据恢复软件&#xff0c;其主要功能是恢复已经删除或损坏的图片文件。该软件可用于恢复各种类型的图片文件&#xff0c;包括JPEG、GIF、BMP、PNG等&#xff0c;同时也支持恢复照片文件…

python-pyecharts画饼图

pyecharts饼图 from pyecharts import options as opts from pyecharts.charts import Pie# 构造数据 data [("A", 10),("B", 20),("C", 30),("D", 40),("E", 50) ]# 实例化饼图 pie Pie()# 添加数据 pie.add("&qu…

【Java多线程】对线程池的理解并模拟实现线程池

目录 1、池 1.1、线程池 2、ThreadPoolExecutor 线程池类 3、Executors 工厂类 4、模拟实现线程池 1、池 “池”这个概念见到非常多&#xff0c;例如常量池、数据库连接池、线程池、进程池、内存池。 所谓“池”的概念就是&#xff1a;&#xff08;提高效率&#xff09; 1…

C语言第三十弹---自定义类型:结构体(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 结构体 1、结构体类型的声明 1.1、结构体回顾 1.1.1、结构的声明 1.1.2、结构体变量的创建和初始化 1.2、结构的特殊声明 1.3、结构的自引用 2、结构体内存…

K8S—集群调度

目录 前言 一 List-Watch 1.1 list-watch概述 1.2 list-watch工作机制 二 集群调度 2.1 调度过程 2.2 Predicate 和 Priorities 的常见算法和优先级选项 2.3 调度方式 三 亲和性 3.1 节点亲和性 3.2 Pod 亲和性 3.3 键值运算关系 3.4 Pod亲和性与反亲和性 3.5 示例…

音视频数字化(数字与模拟-电影)

针对电视屏幕,电影被称为“大荧幕”,也是娱乐行业的顶尖产业。作为一项综合艺术,从被发明至今,近200年的发展史中,无人可以替代,并始终走在时代的前列。 电影回放的原理就是“视觉残留”,也就是快速移过眼前的画面,会在人的大脑中残留短暂的时间,随着画面不断地移过,…

暑期宅家?计算机专业必看的8部电影!一定要安利给你们!

代码编程看上去枯燥乏味&#xff0c;但也是艺术的&#xff0c;感性的&#xff0c;计算机编程的许多概念被应用于电影中&#xff0c;其中有些非常之酷炫&#xff0c;它们甚至能帮助开发人员理解一些编程概念。 所以今天学姐来给大家推荐几部心中top级的编程人必看电影&#xff0…