Pull to refresh

(C++ | Boost) Настраиваем WSL для разработки под Linux для сборки из Visual Studio



Сегодня мы постараемся разобрать все узкие момент настройки среды разработки под 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.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.