Установка WSL и тестовый проект в Visual Studio 2017

В этой статье мы попробуем «установить» Linux в Windows, чтобы, сидя в Windows, можно было разрабатывать софт в Visual Studio для Linux.

B54-1

А если без шуток, то Windows Subsystem for Linux (WSL) позиционируется Microsoft как инструмент для разработчиков. WSL — это слой совместимости для запуска Linux-приложений в Windows 10. Благодаря сотрудничеству компаний Microsoft и Canonical можно опробовать следующие образы Linux: Ubuntu, Debian, SUSE и Kali (которые я нашел в Microsoft Store к установке на момент написания) для непосредственного запуска поверх WSL множества инструментов и утилит из этой ОС без какой-либо виртуализации. При желании можно запускать приложения и с GUI (но с ограничениями) и работать с ними из под Windows как с обычными приложениями.

Установка и настройка WSL

Сразу стоит посмотреть на билд вашей ОС — требуется Windows 10 build 16215 и более поздние, в противном случае пора обновиться! ;)

Установка начинается с включения компонента «Подсистема Windows для Linux«, включается в Панель управления -> Все элементы панели управления
-> Программы и компоненты -> Включение или отключение компонентов Windows:

B54-2

Далее заходим в Microsoft Store и через поиск находим образ Ubuntu для установки в WSL:

B54-3

После установки в Пуске появится bash-консоль с аналогичным названием Ubuntu, запускаем её (при первом запуске необходимо будет ввести имя нового пользователя и пароль):

B54-4

Примечание: я не сделал скриншоты, пока разбирался, а всё заново переустанавливать смысла нет, там и так всё интуитивно понятно… поэтому будут только некоторые моменты установки.

Теперь стоит обновить Ubuntu и доустановить необходимые компоненты. Начинаем с обновления:

$ sudo apt-get update
$ sudo apt-get upgrade

Далее установим пакет с утилитами для разработки а-ля GNU C++ компилятор, линкер и т. д. :

$ sudo apt install -y build-essential

Также потребуется gdbserver, который позволит удалённо отлаживать программу при помощи GDB отладчика:

$ sudo apt install -y gdbserver

Для удаленного подключения к Ubuntu ещё потребуется SSH-сервер:

$ sudo apt install -y openssh-server

После установки openssh-server необходимо подправить его конфигурацию. Открываем файл конфигурации в nano-редакторе:

$ sudo nano /etc/ssh/sshd_config

Пролистываем вниз до параметра “PasswordAuthentication” и меняем его значение на “yes”, что разрешает подключение по паролю:

B54-5

Примечание: Нажимаем CTRL + X для выхода и далее Y для сохранения изменений.

Генерируем SSH ключи:

$ sudo ssh-keygen -A

Теперь необходимо запустить службу SSH перед подключением из Visual Studio:

$ sudo service ssh start

Примечание: Запуск службы необходимо производить каждый раз, когда запускается первая bash-консоль после перезагрузки\включения ПК или закрытия всех окон bash-консоли, т.к. WSL убивает все процессы Linux, когда вы закрываете последнее окно bash консоли.

B54-6.png

И вот тут с SSH может возникнуть такой прикол, что вы вводите правильные логин\пароль, а в ответ вам — доступ запрещён. А это может произойти все по простой причине — в Windows 10 включён встроенный SSH-сервер. И через Putty, и через Visual Studio по localhost вы будете пытаться подключиться не к WSL, а встроенному в Windows SSH серверу, и, понятное дело, будете получать отказ доступа. Починить просто, надо в службах отключить его:

B54-7

B54-8

На этом настройка WSL завершена, можно переходить к следующему этапу.

Первый проект — настройка, компиляция, отладка

Устанавливаем Visual Studio 2017 с набором инструмента «Разработка для Linux на C++»:

B54-9.png

Теперь можно создать проект для консольного приложения под Linux:

B54-10

Чуток изменим исходный код по сравнению с исходным и поставим брейкпоинт на втором printf:

#include <cstdio>
int main()
{    
printf("Hello from ConsoleApplication1!\n");
 for (;;) 
{ 
printf("loop!\n"); 
}    
return 0;
}

Теперь настроим подключение к WSL, чтобы попробовать скомпилировать и начать отладку. Заходим в Tools -> Options -> Cross Platform (у вас будет пусто на свежеустановленной Visual Studio):

B54-11

Нажимаем Add и вводим логин\пароль пользователя, что задавали в bash-консоли (не забываем предварительно запустить SSH-сервер и не закрывать bash-консоль):

B54-12.png

Если все ввели правильно (и не забыли отключить встроенный в Windows SSH сервер), то подключение появится в списке. Можно закрывать окно и пробовать собрать проект, должны получить в Output следующее:


1>------ Build started: Project: ConsoleApplication1, Configuration: Debug x64 ------
1>Validating architecture
1>Validating sources
1>Copying sources remotely to 'localhost'
1>Starting remote build
1>Compiling sources:
1>main.cpp
1>Linking objects
1>ConsoleApplication1.vcxproj -> C:\Users\Andrew\Documents\Visual Studio 2017\Projects\ConsoleApplication1\ConsoleApplication1\bin\x64\Debug\ConsoleApplication1.out
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Успех! Пробуем начать отладку:

B54-13

Ква-ква-ква. Небольшой провал. Но и это поправимо, надо просто сменить в настройках проекта тип отладки:

B54-14.png

Пробуем еще раз (кликабельно):

Работает! :)

Примечание: Текст из printf выводится не в стандартный Output, а в консоль Linux, которая находится в Debug -> Linux Console.

На этом всё.

Заключение

В итоге могу сказать, что установка и настройка для работы проходит быстро и без каких-либо красноглазых засиживаний часами, практически всё уже подготовлено не то, что для разработчика, а для новичка-нуба в отношении Linux.

Более подробно о установке WSL, настройке проекта и его параметрах можно почитать в официальном мануале от Microsoft, эта статья же — просто краткий мануал к установке с описанием возможных проблем.

Мне же интересно опробовать компиляцию для АРМ SoC в WSL, т. к. грамотный человек пишет, что с использованием WSL всё происходит в разы быстрее и без костылей типа MSys, minGW, Cygwin. Будем разбираться, пробовать. :)

Спасибо, что прочитали!

Реклама

Рубрики: C/C++, Visual Studio

Tagged as: , ,

Добавить комментарий

Please log in using one of these methods to post your comment:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s