VS2017创建并调试LINUX程序

原创,转载请申明
宇宙第一IDE以前没办法用在linux程序先,现在不仅能在python上调试也能调试linux程序。

  • 1.VS安装
  • 2.SSH
  • 3.创建linux工程
  • 4.头文件
  • 5.连接库

1.VS安装

这里我就不详细说了,网上都有安装时候把linux组件选上就好了。


image.png

2.SSH

SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UXLinuxAIXSolarisDigital UNIXIrix,以及其他平台,都可运行SSH。
linux console window下

sudo apt-get install ssh

默认端口为22,可以修改。

3.创建linux工程

170312111691991.gif

Setting up your project for Linux Development
With this workload you can author C++ code for Linux servers, desktops and devices. You can manage your connections to these machines from within VS. VS will automatically copy and remotely build your sources and can launch your application with the debugger. Our project system supports targeting specific architectures, including ARM.


ArchOptions.gif

Adding and removing connections
To add a new connection, go to Tools > Options and search for Connection, Connection Manager will be under Cross Platform. From here you can add and remove connections.


ManageConnections.gif

To change which connection a project is using go to the project properties general settings and update the Remote Build Machine option.
ChangeRemote.gif

Project Properties
All of the options necessary to control C++ compilation are exposed on the project properies pages. We'll cover a few specific to how things work for Linux. First under general settings, you will see the remote root is set to ~/projects/ by default and that we are setting the remote project directory to match our project name in that location.


OutputTypes.gif

4.头文件

  1. 目标机上gcc、g++、gdb一定要安装
  2. linux引用的头文件需要手动复制到$:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr路径下,尤其是特殊的项目引用头文件
  3. 包含目录最好在(项目右键->属性->c/c++->常规->附加包含目录)
  4. 自定义库包含目录一定要在(项目右键->属性->链接器->常规->附加库目录)里面添加,(vc++目录没有用)
  5. gdb调试项目在复制到linux时是ssh登录用户下的目录,如果没有设置绝对路径
  6. vs2017生成时都需要目标机的支持,否则会有g++的编译错误

5.链接库

  • 远程调试Linux的话,动态库libxxx.so和静态库xxx.a都是在[链接器->输入]里配置
    例如libopencv_core.so,连接器输入时只要填写opencv_core
  • 静态库如果是在Linux环境下,就要在项目属性中:链接器->常规->附加库目录中添加对应的库路径(写Linux环境下的绝对路径),在链接器->输入->库依赖项里面写上需要的库名称,去掉名称里面的lib和扩展名.a,例如:libuser.a就是user。
    总之在编译阶段需要的文件配置实际都是在Linux环境下的。比如在项目中使用到了第三方库,需要引用头文件以及静态库,动态库。那这些头文件库文件都是在Linux环境下去用的,要保证项目在编译阶段能够在Linux环境下找到对应头文件和静态库文件,在运行的时候也能找到对应的动态库。头文件和静态库的配置都是要在项目属性中去配置的,配置的时候要求是那些文件在Linux系统目录中的位置,一般写绝对路径就好了。
  • 动态库配置用户环境变量就可以了,比如生成的可执行文件在运行的时候需要一个.so文件,如果这个.so文件在系统库目录下,就不需要再去设置了。如果在用户自定义的目录下,就需要配置用户环境变量或者系统环境变量。比如修改一个用户的环境变量,进入该用户目录下,修改.bashrc文件添加LD_LIBRARY_PATH=自定义动态库目录。修改完之后记得使用source .bashrc命令使修改生效。
#将用户根目录下的lib目录添加到动态库目录,这样该用户的执行文件再运行的时候就会再这个目录中查找相应的.so文件
LD_LIBRARY_PATH=$HOME/lib  
export LD_LIBRARY_PATH
source .bashrc

其他

调试->linux控制台可以查看输出信息



属性->调试->启动前命令,填入:

export DISPLAY=:0.0

这样就能在远端启动程序并显示。
若要并行计算,由于现在使用g++进行编译,默认没有打开openmp。C/C++ ->命令行->其他选项、连接器->命令行->其他选项

-fopenmp

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 67,873评论 12 114
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 122,751评论 15 534
  • 百战程序员_ Java1573题 QQ群:561832648489034603 掌握80%年薪20万掌握50%年薪...
    Albert陈凯阅读 9,145评论 2 29
  • 有人跟我说,微商都是骗人的! 起初我也是这么认为的。直到我接触到了粉刷匠,才让我明白,在未来十年最大的机会就是移动...
    韦哥说道阅读 18评论 0 0
  • 真正到了分别的时候,心里却那么不舍。 往事如烟,历历在目。 十六年的青春,十六年的汗水。 未来如斯,忐忑如斯。
    雨林卫阅读 13评论 1 0