使用VS2017调试Linux C++代码
VS2017版本现已支持开发Linux项目,就是在VS上面写代码,而编译和运行是在Linux环境下。
使用场景:
假如,代码最终是运行在Linux系统上,而我们又不想在Linux环境下写代码,想借用VS强大的开发功能做开发,那么就可以在VS上面创建一个Linux项目。
设置:
项目建好之后,需要设置远程连接,指定代码最终要运行的目标平台。
编译:
项目编译的时候,VS会把代码拷贝到Linux对应目录下面,然后调用Linux的g++对项目进行编译。编译过程中如果有什么错误都会显示在VS的编译输出中,就跟开发普通Windows程序一样。
调试:
调试的时候也可以给代码下断点,实际的调试工作是Linux环境中gdb干的,VS中只是显示调试信息。这样调试起来要比在Linux环境下方便很多。
使用演示:
下面简单演示一下使用VS创建Linux程序:
创建好之后,需要准备好Linux环境,确保Linux环境中已经安装了g++ gdb gdbserver。
例如,我是在虚拟机中装了一个CentOS系统,按照VS提供的教程,运行yum install openssh-server g++ gdb gdbserver,安装好相关软件。
在运行的时候提示gdbserver没有安装,后来在CentOS里面运行yum install gdb-gdbserver安装了gdbserver就好了。
在我们第一次编译运行项目的时候会提示连接Linux主机
选项 | 内容 |
---|---|
Host name | Linux主机ip地 |
Port | 使用默认22 |
User name | Linux系统中的用户名,例如,root |
Authentication type | 选用Password |
Password | 用户密码 |
连接好之后,就可以运行程序了。
通过 调试->Linux控制台 可以看到运行结果
使用技巧:
在开发过程中需要注意的是,许多Linux系统头文件在Windows本地没有。所以,在编写代码的时候,如果包含Linux系统文件,IDE会提示没有找到头文件或者找不到符号等问题(实际编译是没有问题的,因为编译是在Linux环境下编译的,相应的头文件也能找到)。使用VS进行开发的目的就是便于开发和调试,没有了代码补全和提示,那和使用vim就没多大区别了。
对于这个问题,可以这样解决:将Linux系统下/usr/include/ 目录下的文件全部复制到Windows下的C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr\local目录下。这样IDE就能找到这些头文件了,在编写代码的时候也就能很好的使用VS各种补全功能,大大方便了开发。
如果要引用Linux下系统目录之外的头文件,要在项目属性附加包含目录中添加,添加的路径是Linux下路径,如:/home/myproject/include。
编译过程中如果需要用到的静态库,就要在项目属性中:链接器->常规->附加库目录中添加对应的库路径(写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
对于有些头文件也需要配置在Windows本地,这样只是为了方便编码。配置的方法就是,在项目属性->VC++目录->包含目录,这里配置就可以,实际上对于Linux项目来说,这里可配置也可不配置,配置只是为了IDE找到头文件,方便编码。
更多推荐
所有评论(0)