使用Visual Studio 2017开发Linux程序_vs2017 如何创建 linux程序-程序员宅基地

技术标签: C/C++  C++  visual studio  

原文:https://www.cnblogs.com/dongc/p/6599461.html

环境:

  win7_x64旗舰版、VS2017企业版、VMware10.0.2、CentOS7

  在CentOS7上首先需要安装gcc、g++和gdbserver,这里就不多说

一、安装VS2017

  1.1 安装VS2017时,必须要勾选“使用C++的Linux开发”工具集

二、创建Linux项目

2.1 创建一个名称为"TestLinux"的解决方案,我们稍后会在这个解决方案内新建多个Linux项目(包括可执行程序、动态库、静态库等)

 

2.2 添加新建项目可执行程序项目"test"

2.2.1

2.2.2

 

2.3 添加新建项目,创建动态库

2.3.1

2.3.2

 

2.4 添加新建项目,创建静态库

2.4.1

2.4.2

 

三、添加测试代码

3.1 "test"项目中main.cpp代码:

复制代码

#include <cstdio>

#include "static_library/static.h"
#include "dynamic_library/dynamic.h.h"

int main()
{
    printf("hello from test!\n");
    printf("static_library test : %d\n", static_test(1));
    printf("dynamic_library test : %d\n", dynamic_test(1));
    return 0;
}

复制代码

 

3.2 在"static_library"项目中添加static.h和static.cpp

static.h

#ifndef _STATIC_LIBRARY_H_
#define _STATIC_LIBRARY_H_

int static_test(int n);

#endif // !_STATIC_LIBRARY_H_

 

static.cpp

#include "static.h"

int static_test(int n)
{
    return n * 3;
}

3.3 在"dynamic_library"项目中添加dynamic.h和dynamic.cpp

dynamic.h

#ifndef _DYNAMIC_LIBRARY_H_
#define _DYNAMIC_LIBRARY_H_

int dynamic_test(int n);

#endif // !_DYNAMIC_LIBRARY_H_

 

dynamic.cpp

#include "dynamic.h"

int dynamic_test(int n)
{
    return n * 2;
}

 

 

四、项目配置

4.1 "常规"配置

配置主程序:

本地输出目录:"$(ProjectDir)bin\$(Platform)\$(Configuration)\"修改为"$(ProjectDir)..\bin\$(Platform)\$(Configuration)\",是为了将所有项目输出文件放到同一个目录中,方便相互引用。

目标文件扩展名:".out"修改为"",是为了不生成文件后缀,一般的Linux可执行程序是没有扩展名称的,可修改也可不修改。

远程生成根目录:"~/projects"修改为"/root/projects/$(SolutionName)","~"和"/root"是等价的,但是运行时动态库搜索目录不支持~路径,添加“$(SolutionName)”是为了区分不同的解决方案下相同名称的项目。

远程生成项目目录:"~/projects"修改为"/root/projects/$(SolutionName)","~"和"/root"是等价的,但是运行时动态库搜索目录不支持~路径,添加“$(SolutionName)”是为了区分不同的解决方案下相同名称的项目。

 配置动态库:"$(RemoteRootDir)/$(ProjectName)"修改为"$(RemoteRootDir)"

本地输出目录:"$(ProjectDir)bin\$(Platform)\$(Configuration)\"修改为"$(ProjectDir)..\bin\$(Platform)\$(Configuration)\"

目标文件扩展名:".out"修改为".so"

远程生成根目录:"~/projects"修改为"/root/projects/$(SolutionName)"

配置类型:"应用程序(.out)"修改为"动态库(.so)"

配置静态库:

本地输出目录:"$(ProjectDir)bin\$(Platform)\$(Configuration)\"修改为"$(ProjectDir)..\bin\$(Platform)\$(Configuration)\"

目标文件扩展名:".out"修改为".a"

远程生成根目录:"~/projects"修改为"/root/projects/$(SolutionName)"

配置类型:"应用程序(.out)"修改为"动态库(.a)"

 

4.2 "调试"配置

程序:"$(RemoteTargetPath)"修改为"$(RemoteRootDir)/bin/$(Platform)/$(Configuration)/$(TargetName)$(TargetExt)",因为前面修改了本地输出目录导致远程输出目录也相应发生变化,这里修改一致。

工作目录:"$(RemoteOutDir)"修改为"$(RemoteRootDir)/bin/$(Platform)/$(Configuration)",这个是远程主机CentOS上的路径,如果设置不正确将找不到引用的动态库,调试程序无法启动。

其他调试程序命令:""修改为"set solib-search-path $(SolutionDir)bin/$(Platform)/$(Configuration)",这个是本地路径,调试符号是从本地加载的,否则调试动态库时,gdb会输出没有找到调试符号文件。

 

4.3 "C/C++"配置

附加包含目录:在"$(StlIncludeDirectories);%(AdditionalIncludeDirectories)"前面添加"./..;",这个是远程主机CentOS上的路径,相当于gcc编译时指定"-I[路径]"选项;一般是先把需要的头文件从CentOS复制到windows,然后设置"配置属性"->"VC+ +目录"->"包含目录",这样在编写Linux程序时,提示信息更加的友好^^。

 

4.4 "链接器"配置

附加库目录:在"%(AdditionalLibraryDirectories)"前面添加"$(RemoteRootDir)/bin/$(Platform)/$(Configuration);",这个是远程主机CentOS上的路径,相当于gcc编译时指定"-L[路径]"选项,用于指定引用动态库和静态库的目录;

库依赖项:添加"dynamic_library;static_library",相当于gcc设置"-l[库名称]"选项,用于指定链接时所需要的动态库和静态库名称,如果找不到依赖的库文件,链接时会错误,显示"无法解析的符号"。

其他选项:添加"-Wl,-rpath=$(RemoteRootDir)/bin/$(Platform)/$(Configuration) ",指定程序运行时搜索动态库的路径。

 

五、开始调试

5.1 设置远程调试主机

5.2 显示Linux控制台

最后的Demo下载地址:TestLinux.zip

 

其他错误:

1)Inferior 1 (process 6074) exited normally

 

通常是没有生成Debug可执行文件,若使用cmake,则添加CMAKE_BUILD_TYPE=Debug,重新生成即可。

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

智能推荐

11款AI人工智能工具,轻松满足工作需求-程序员宅基地

文章浏览阅读601次。在当今数字化时代,人工智能的快速发展为创意产生带来了全新的可能性。随着AI技术的不断进步,越来越多的创意灵感生成器应运而生,为创作者们带来了一键生成创意想法的便利。本文l1m0_将为大家介绍11个值得推荐的AI灵感生成器,探索它们如何激发创意思维并为我们开辟创新之路。

oracle存储大小限制,oracle调整内存大小-程序员宅基地

文章浏览阅读1k次。1、查看已分配内存,看到memory_max_target为20GSQL> show parameter sgaNAME TYPE VALUE------------------------------------ ----------- ------------------------------lock_sga ...

使用Python/arcpy批量向shp文件添加字段-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏14次。版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/103874623相关需要,所以要实现这个,以下内容经验确实(经过验证确定属实)。参官方文档得:import arcpy as apap.env.workspace='D:/temp'先把shp文件...

使用pandas时 报错 ValueError: Shape of passed values is (6, 2), indices imply (6, 1)_shape of passed values is (6, 1), indices imply (6-程序员宅基地

文章浏览阅读4.6k次。使用pandas时 报错 ValueError: Shape of passed values is (6, 2), indices imply (6, 1)最近在看“使用python进行数据分析”一书时,在输入以下代码后出现如题所示的报错:righth = DataFrame(np.arange(12).reshape((6, 1)), index=[['Nevada', 'Nevada', 'Ohio', 'Ohio', 'Ohio', 'Ohio'], _shape of passed values is (6, 1), indices imply (6, 2)

C++中的Algorithm头文件、迭代器、STL基本容器-程序员宅基地

文章浏览阅读879次。1,Algorithm意为“算法”,是C++的标准模板库(STL)中的重要头文件之一,提供了大量基于迭代器的非成员模板函数,此处介绍一下find(),swap(),sort(),for_each(). 对于一个容器vector&lt;int&gt; nums={8,7,5,4,2,9,6,1,3,0};find(nums.begin(),nums.end(),4); 返回第一次出现4的位置的迭代器...

Javascript之判断一个字符串是否是json_js 判断是否可以json.parse-程序员宅基地

文章浏览阅读1k次。本文主要参考自:https://www.cnblogs.com/lanleiming/p/7096973.html整理至自己博客近做留存。说明: 只是单纯的用JSON.parse(str)不能完全检验一个字符串是JSON格式的字符串。单纯的字符串,boolean类型的变量也可以被成功解析。 JSON.parse('123'); // 123 JSON.parse('{}..._js 判断是否可以json.parse

随便推点

R语言数据挖掘概述(一)_数据挖掘与r语言概述-程序员宅基地

文章浏览阅读2.8k次。1.数据分析与挖掘的必要性数据量的规模由传统的GB,TB量级,变为PB,EB,ZB级别,大数据的"4V"特点即大量(volume)、高速(velocity)、多样(variety)、价值(value). 因此一般的大数据分析需要四个核心要素:基于云计算的基础设施,分布式的大数据体系,数据分析方法与算法,行业应用知识与经验。人类的数据生产能力达到空前,从数据挖掘方法入手,无疑是最佳选择。2..._数据挖掘与r语言概述

JaveWeb 公司项目(2)----- 类模态窗口显示DIV并将DIV放置在屏幕正中间-程序员宅基地

文章浏览阅读146次。上一篇博客写的是通过隐藏显示进行div的替换,接下来需要在原有的div前添加一个div,进行表单的提交,需要将div放置在正中间,然后类似C#中的模态窗口,在进行完新弹出的div操作之后,才可以进行下一步操作首先第一步,新建一个div窗口,代码暂时不贴,主贴的最后贴上完整代码效果如图所示:可以看出此时的DIV只是将元素展示了出来,还没有进行相应的优化,且不能对元素进行操作,主...

WEB前端 -- 浮动_wed前端浮动怎么写-程序员宅基地

文章浏览阅读4.5k次。1.float:浮动浮动的核心:浮动元素会脱离文档流并向左/向右浮动,直到碰到父元素或者另一个浮动元素。 div{ width:100px; height:50px;} .div1{ background:#3F0; float:left;} .div2{ background:#CF0; float:left} .div3{ background:#F96; width:_wed前端浮动怎么写

listView图文显示! 并且简单解决一下图片混乱问题-程序员宅基地

文章浏览阅读6.5k次。现在很多使用的应用中,都有一些图文兼并的消息展示,并且是列表形式实现的! 其中不乏有一些是使用的Listview来展示出来的. 今天简单的写了个demo再来回顾一下基础知识. 先来看看效果 现在来说说代码这里我使用的是官方提供的Volley网络框架 在build中添加这个dependencies { compile 'eu.the4thfloor.volley:com.android.

常用CSS样式(一)——小白篇-程序员宅基地

文章浏览阅读3.5k次,点赞9次,收藏75次。我们知道,HTML的作用就是绘制页面的整体布局。在浏览页面的时候,映入眼前的是五彩缤纷的页面,我们通过HTML只能绘制单调的布局,不能呈现出五彩缤纷的页面,那么要怎么才能做出五彩缤纷的页面呢?我们需要借用一个小工具——CSSCSS简介CSS是层叠样式表(Cascading Style Sheets)的缩写,样式储存在CSS(层叠样式表)中,样式定义HTML元素在页面中如何显示,起到渲染页面的作用,好比色彩,能让空白的草画变得生动。引用CSS的方式CSS作为一个小工具,需要我们添加到我们编写好的元素中

智能交通类论文速览_real-time rain detection and wiper control employi-程序员宅基地

文章浏览阅读594次。该专题旨在快速收集汇总交通领域权威期刊最新发表的文章,重点涉及文章标题,发表时间,文章链接等,实现快速获取最新发表的paper信息,方便追踪捕捉信息全力助跑科研!微信公众号(交通充电圈)同步更新,每周一更IEEETransactions onIntelligent Transportation Systems【1】A Graph Convolutional Stacked Bidirectional Unidirectional-LSTM Neural Network for Metro R.._real-time rain detection and wiper control employing embedded deep learning