重装系统后安装VS2015时卡住了,于是试试看VS2017怎样,听说还支持调Linux。发现VS2017跟12/13/15又有了新的飞跃,竟然支持模块化下载,对于我这种主要写C++简直是个福音,勾了Linux C++和MFC后,C盘+D盘也才6G,比起VS2015只额外勾MFC就有10G来说轻了这么多!
VS2017只有在线安装包,寝室里下载不到10分钟就搞定了,迫不及待地新建项目
哇擦,终于没有了微软地一堆.NET系列了!
然后现在就开始配置跨平台Linux开发环境,按照官网教程
https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-development/
我的Linux是Ubuntu 16.04,微软支持14.04和16.04,所以可以使用。首先为了支持远程调试,Linux那边需要安装一些服务
sudo apt-get install openssh-server g++ gdb gdbserver
这里我一开始发现Linux不能联网,原来是之前在实验室里设置了静态IP,回寝室后,由于这个静态IP和寝室的路由器支持IP不是一个网段,导致需要重新修改IP跟主机一个网段。具体参见之前的博客 虚拟机Linux桥接模式下设置静态IP
新建一个Linux控制台项目,VS主页会有教程,于是迫不及待地写了份使用POSIX线程库的代码
#include <cstdio> #include <cstdlib> #include <string.h> #include <pthread.h> void* thread_func(void* arg) { printf("线程函数: %s ", static_cast<char*>(arg)); return nullptr; } int main() { pthread_t tid; int errnum = pthread_create(&tid, nullptr, thread_func, const_cast<char*>("Hello Linux!")); if (errnum != 0) { fprintf(stderr, "pthread_create error: %s ", strerror(errnum)); exit(1); } errnum = pthread_join(tid, nullptr); if (errnum != 0) { fprintf(stderr, "pthread_join error: %s ", strerror(errnum)); exit(1); } return 0; }
使用POSIX线程时,编译选项需要加上-pthread,于是在菜单:调试->HelloLinux属性(这里HelloLinux是项目名称)中修改命令行参数
既然是远程调试,那么自然需要远程连接了,写好代码后菜单:调试->生成解决方案(快捷键F7)后,会自动弹出连接框(端口号是22,即SSH连接,所以刚才才需要在Linux上安装openssh-server)
在菜单:工具->选项->跨平台中,也可以看到远程连接地信息
编译会出错,提示找不到pthread_create和pthread_join,但是我加了-pthread编译选项啊?原因是VS没有自动把Linux的头文件包含进来,因此需要手动把Linux系统的/usr/include、/usr/local/include目录复制到VS的linux头文件路径下,我的VS安装路径把默认的C盘改成了D盘,于是目录就是下面这个
D:Program Files (x86)Microsoft Visual Studio2017CommunityCommon7IDEVCLinuxincludeusr
然后要添加该目录到VS的头文件目录下
然后程序参数也要修改
之后就是F7组建、F5调试了,注意要在控制台显示结果必须打开Linux控制台(菜单:调试-Linux控制台)
结果如图,程序运行成功了,但是中文字符乱码,原因是VS2017默认编码模式并不是UTF-8,这里需要安装插件
菜单:工具->扩展与更新->联机,搜索UTF找到最顶上这个插件,下载
之后重启VS,重新生成解决方案->开始调试,依然乱码。原因是更改了UTF-8之后,原来代码中的中文没有自动转换成UTF-8编码,但是显示的还是中文而非乱码,所以需要把中文部分全部删除然后再次键入,之后就成功了
锵~锵~除了远程连接有点耗时间外,其余还是很满意的,VS大法好!