环境:

  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());
printf("dynamic_library test : %d\n", dynamic_test());
return ;
}

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 在"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 * ;
}

四、项目配置

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,重新生成即可。

2)如果使用附加到进程(Native GDB代码)进行调试,提示输出"Cannot find or open the symbol file"

  我们一般会在Linux中设置动态库加载路径,例如:export LD_LIBRARY_PATH=lib

此时程序加载动态库使用的就是相对路径,使用ldd命令查看

  

  因为是相对路径,所以VS2017远程附加到进程后,不能在此路径加载动态库的符号

  解决办法:

    设置动态库加载的绝对路径,例如:export LD_LIBRARY_PATH=/lib,重新启动程序,然后再使用VS2017重新附加进程

3)Window下使用的Linux头文件与开发的远程Linux系统不一致

  需要到Linux远程开发上将相关头文件需要手动拷贝到Window系统下

  将/usr/include目录拷贝到C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\Linux\include\usr\include

  将/usr/lib/gcc/x86_64-redhat-linux目录拷贝到C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\Linux\include\usr\lib\gcc

使用Visual Studio 2017开发Linux程序的更多相关文章

  1. Visual Studio 2017开发环境的安装

    Visual Studio 2017是微软为了配合.NET战略推出的IDE开发环境,同时也是目前开发C#程序最新的工具,本节以Visual Studio 2017社区版的安装为例讲解具体的安装步骤. ...

  2. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)

    Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer   Advanced Installer :Free for 30 da ...

  3. 使用Visual Studio 2017作为Linux C++开发工具

    Visual Studio 2017 微软的宇宙第一IDE Visual Studio 2017正式版出来了,地址是:https://www.visualstudio.com/vs/whatsnew/ ...

  4. Visual Studio 2017 - Windows应用程序打包成exe文件(1)- 工具简单总结

    最近有对一个Windows应用程序少许维护和修改.修改之后要发布新的exe安装文件,打包exe文件时,遇到了很头疼的问题,还好最后解决了,记录一下. Visual Studio版本:Visual St ...

  5. 使用Visual Studio 2015开发Android 程序

    环境配置: 操作系统:win 7 64位 IDE:Visual Studio 2015 SDK:installer_r24.3.3-windows 安装前提: 编辑hosts文件(在附件可下载)因为安 ...

  6. (转)使用Visual Studio 2015开发Android 程序

    环境配置: 操作系统:win 7 64位 IDE:Visual Studio 2015 SDK:installer_r24.3.3-windows 安装前提: 编辑hosts文件(在附件可下载)因为安 ...

  7. 使用Visual Studio 2017开发python,并在iis上部署Python Django

    作为宇宙第一IDE,怎么可以不支持python开发呢? 1.Visual Studio Installer 扩展Python开发 开始菜单中打开Visual Studio Installer,点修改. ...

  8. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer

    Advanced Installer :Free for 30 days. All features. 下载地址:https://www.advancedinstaller.com/download. ...

  9. 使用Visual Studio 2019开发Qt程序

    安装Qt 如标题,你首先需要到 http://download.qt.io/ 去下载并安装Qt,并在引导下安装MSVC组件(这里不做过多解释) Visual Studio 2019 配置 打开VS20 ...

随机推荐

  1. MFC动态创建对话框中的按钮控件并创建其响应消息

    转自:http://www.cnblogs.com/huhu0013/p/4626686.html 动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 1 ...

  2. spring 定时任务执行2次

    eclipse 上定时任务执行没有问题,生产环境可以看到定时任务同时执行了2次,排除代码原因,网上找了些资料,最后发现是tomcat的原因, Host 节点中有一个appBase 属性指向了webap ...

  3. 简述我理解的C#

    第一章:开发入门 一.基础知识    1.计算机语言发展进程:计算机语言大致经过了机器语言.汇编语言.高级语言三个阶段的发展历程. 汇编语言:使用助记符来替代机器指令机器语言这种反人类的设计,阻碍了软 ...

  4. LINUX安装vm tools及使用方法(centos7,vm12)

    1.安装vmtools: 下载文件之后,到自动挂在的目录下(/run/media/用户名),将文件cp到其他的目录: 然后到其他的目录,解压缩,执行pl文件,执行方式:./vmware-install ...

  5. HIVE中IN的坑

    问题:为什么HIVE中用了 NOT IN,结果集没了? 注:这个是原创,转载请注明,谢谢!直接进实验室>> > select * from a;OK1 a12 a23 a3Time ...

  6. IIS10安装IIS URL重写模块2伪静态组件提示需要IIS7.0以上版本。

    解决方法: 打开注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp 双击右边MajorVersion,默认的数值是a,修改成9,然后再安装 ,安装完成后 ...

  7. Oracle入门之对表内容的dml操作

    oracle表的管理--添加数据 使用insert语句向表中插入数据 插入数据基本语法: insert into table[(column [,column...])] values(value [ ...

  8. python基础学习之文件操作&函数

    1.文件处理相关 1.编码问题 ①python2与python3中的默认编码: py2默认使用ASCII码,py3默认使用utf-8 ②为什么会出现中文乱码,中文乱码的情况有哪些? #sys.stdo ...

  9. app模块设计

    至于app模块设计,要坚持三个原则: 1.放羊,让用户决定模块间的组合与穿插. 2.滥竽充数,对于用户不希望的模块,可以悄悄植入以实现产品目标. 3.照葫芦画瓢,遵守用户在其它APP上的既有习惯,组合 ...

  10. P2886 [USACO07NOV]牛继电器Cow Relays

    题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...