(C++ | Boost) Настраиваем WSL для разработки под Linux для сборки из Visual Studio
Invite pending
Сегодня мы постараемся разобрать все узкие момент настройки среды разработки под 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
Если шаги прошли успешно — Ваша подсистема готова для сборки консольных проектов C++ с использованием библиотек 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 и более библиотеки, синтаксис будет следующий:
Где libboost_filesystem.a и libboost_thread.a название библиотек, которые включаются и используются в проекте.
После всех манипуляций, простой проект со следующим исходным кодом успешно компилируется.
Подведем итоги, мы успешно установили и настроли подсистему WSL для разработки под Linux с использованием языка С++ и библиотек Boost. Настроили среду разработки и собрали необходимые библиотеки на стороне WSL.
Открываем надстройки приложения -> Диспетчер подключений -> Вводим данные 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.