Сегодня мы постараемся разобрать все узкие момент настройки среды разработки под Linux из ОС Windows с использованием бустов, с++ и подсистемы линукс (WSL). В данном руководстве, как новичек в с++ (пришел из dotnet), я отчаянно нуждался весь вчерашний вечер. Информация была крайне разрозненна и мне пришлось все собирать по-частям, чтобы довести среду до рабочего состояния, в которой можно и «нужно» разрабатывать.
Как говорил один из преподавателей по плюсам:
Плюсы без бустов — деньги на ветер

И это действительно так! Поэтому мы соберем среду для возможной работы с бустами и статической сборкой.


Определимся с планом:

  • Установить компоненты для разработки под Linux из VS
  • Активировать подситему WSL
  • Установка и настройка компонентов, включая boost
  • Создание, конфигурирование и построение проекта


Этап 1 - Установка компонентов для разработки под Linux из VS
  • Открываем Visual Studio Installer



  • Выбираем необходимую рабочую нагрузку



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

Этап 2 - Активировация подситемы WSL
Данный шаг вы можете пропустить, если Вам удобнее работать с любой другой виртуальной машиной.

  • Открываем Мой Компьютер — Удалить или изменить программы — Программы и компоненты — Включение или отключение компонентов Windows
  • Активируем подсистему Linux



После применения изменений в ОС — система попросит перезагрузить компьютер.

  • После перезагруки компьютера — открываем Microsoft Store
  • В поиске ищем — Debian (также доступны различные варианты подсистемы)
  • Устанавливаем пакет
  • Запускаем пакет Debian
  • Вводим ваш логин и пароль
  • Система установлена (Для ее активации Вы можете использовать команду в коммандрой строке «wsl» или запускать по загруженному пакету (Debian)



Этап 3 - Установка и настройка компонентов, включая boost
  • Установим основные пакеты необходимые интеграции с IDE

sudo apt-get install openssh-server g++ gdb gdbserver make ninja-build rsync zip


  • Скачаем wget (для скачивания библиотек boost) и активируем ssh

sudo update-rc.d ssh defaults && sudo service ssh start && sudo apt-get install wget


  • Скачаем boost

wget -O boost_1_74_0.tar.gz https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.tar.gz
tar xzvf boost_1_74_0.tar.gz
cd boost_1_74_0/


  • Соберем буст в статической сборке (если кому-то не нужна статическая сборка — опускаем параметр link=static)

sudo ./bootstrap.sh --prefix=/usr/ && sudo ./b2 link=static install && sudo ./b2


Если шаги прошли успешно — Ваша подсистема готова для сборки консольных проектов C++ с использованием библиотек Boost (Запомните или запишите путь к библиотекам указанные как на изображениия, у вас могут отличаться).



Этап 4 - Создание и конфигурирование проекта
Запускаем Visual Studio и создаем проект «Консольное приложение» для ОС Linux



Открываем надстройки приложения -> Диспетчер подключений -> Вводим данные ssh (Для wsl адрес ssh является локальным адресом машины текущей ОС).



После настройки соединения с подсистемой необходимо добавить зависимости Boost.

Добавление заголовков:



Добавление каталога библиотек:



На этом приключения не завершаются! Rsync вытянет с wsl заголовки, но компоновщик будет постоянно выдавать ошибку компоновки. Для того, чтобы Ваш проект был построен удачно, необходимо добавить вручную пусть к статическим библиотекам:



Данным действием мы явно указываем, где находится наши статические библиотеки, т.е. если у нас 1 и более библиотеки, синтаксис будет следующий:

-lpthread  -Wl,--whole-archive  "/mnt/c/Users/User/boost_1_74_0/stage/lib/libboost_thread.a" "/mnt/c/Users/User/boost_1_74_0/stage/lib/libboost_filesystem.a"  -Wl,--no-whole-archive 


Где libboost_filesystem.a и libboost_thread.a название библиотек, которые включаются и используются в проекте.
После всех манипуляций, простой проект со следующим исходным кодом успешно компилируется.
#include "boost/thread.hpp"
#include "iostream"
#include "string"
#include <boost/format.hpp>
#include "boost/filesystem.hpp"


int main()
{
	
	using namespace std;
	cout << string("Начало потока")<<endl;
	boost::thread th([]
	{
			for (int i = 1; i <= 10; i++)
				cout << (boost::format("[%d] Current path is %d[%d]\n") % i % boost::filesystem::current_path() %i).str();
	});

	th.join();
	cout << string("Поток завершен!")<<endl;
	pause();
    return 0;
}





Подведем итоги, мы успешно установили и настроли подсистему WSL для разработки под Linux с использованием языка С++ и библиотек Boost. Настроили среду разработки и собрали необходимые библиотеки на стороне WSL.