Harrix Блог

  • Списки статей
    • Все статьи
    • IT
    • Qt
    • C++
    • Сложение двух чисел
    • Web программированиe
    • FAQ
    • Latex
    • Установка программ
    • Мифы
    • Видео
    • Про фото
  • Проекты
  • Harrix.org
  • RSS
  • Контакты

Установка Boost под Qt

Инструкция.

07.05.2017 1 Comment 14 173 просмотров

Сказ о том, как установить библиотеку Boost для Qt под MinGW и Qt под Visual Studio.

У меня со времени C++ Builder 6 стойкая нелюбовь к непереносимым библиотекам в языках программирования. Когда нужно при переносе проекта в среде разработке что-то дополнительно настраивать и устанавливать. По этой же причине не люблю Boost. Но пришлось недавно им заняться.

Содержание

  • Подготовка
  • Работаем с Qt
  • Сборка для Qt под MinGW
  • Сборка для Qt под Visual Studio
  • Подготовка Qt проекта
  • Проверка №1
  • Проверка №2

Подготовка

На сайте http://www.boost.org/ скачиваем последнюю версию библиотеки Boost.

Распакуем архив куда-нибудь и переименуем папку в boost. Я распаковал в корень диска C:\boost.

Работаем с Qt

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

Под каждый компилятор вам нужно собирать библиотеку отдельно!

Для Qt под MinGW нам потребуется программа gcc.exe.

У меня этот файл находится в папке

C:\Qt\Qt5.8.0_mingw_android\Tools\mingw530_32\bin.

На время добавим этот путь в системную перeменную Path.

Сборка для Qt под MinGW

Вызываем командную строку. Например, жмем Win + R. Там вводим cmd и жмем Enter.

Вводим команду.

1
cd C:\boost

Вводим команду. И ждем, когда всё выполнится (всё пройдет быстро)

1
bootstrap.bat gcc

Вы библиотеку Boost возможно будете собирать под разные версии компиляторов на одном компе. Поэтому в следующей команде укажите название папки, которая создаться в папке C:\boost, куда будут закинуты собранные файлы. Для Qt 5.8 папку назвал boost_mingw_53_32

Вводим команду (не забудьте поменять название папки!). И ждем, когда всё выполнится (а вот это будет не быстро).

1
b2 toolset=gcc link=shared --prefix=boost_mingw_53_32 install

И через долгое время (у меня ушло больше 20 минут) библиотека соберется.

Итак, у нас у меня в папке C:\boost\boost_mingw_53_32 собранная библиотека, которую я теперь могу использовать.

Не забудьте удалить путь к gcc.exe из переменной Path. Если вы не удалите, то ничего страшного не случится, но в будущем, когда под другой компилятор или другой версии текущего компилятора будете собирать boost, возникнут проблемы.

И вам нужно удалить только один путь из переменной Path. Не вздумайте удалить всю переменную Path. Это приведет к очень плохим последствиям!

Сборка для Qt под Visual Studio

И если под сборка под MinGW прошла без проволочек, то со сборкой под Visual Studio я намучился.

У меня стоит сразу две версии Qt: под MinGW и под Visual Studio (QWebEngine работает только под Visual Studio).

Тут вместо gcc.exe будет нужен файл cl.exe. У меня стоит Visual Studio 2015, и данный файл находится в папке

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

Добавляем этот путь временно в системную переменную Path.

Также нам потребуется знание версии Visual Studio. Она не совпадает с названием установленной Visual Studio! У стоит Visual Studio 2015, а версия vc14.

Надеюсь, что вы не вышли из командной строки. Если вышли, то войдите заново и перейдите в папку с boost.

1
cd C:\boost

Вводим команду. Вместо vc14 вводите свою версию Visual Studio.

1
bootstrap.bat vc14

И вот теперь тот злополучный момент, который отнял у меня массу времени. Нужно написать команду, которая запустит сборку. Главное прописать правильные параметры. У меня в конце концов сработала вот эта:

1
b2 toolset=msvc-14.0 --build-type=complete --prefix=boost_msvc2015 install

Помните, что в команде boost_msvc2015 — это папка, куда будет складываться собранные файлы под компилятор Visual Studio. А в значении msvc-14.0 поставьте свою версию Visual studio.

На всякий случай напишу те команды, которые у меня не сработали, но которые находил в интернете. Возможно у вас моя версия не сработает как нужно, а эти сработают.

1
2
3
b2 toolset=msvc-14.0 link=shared --prefix=boost_msvc install
b2 toolset=msvc-14.0 link=shared --build-type=complete --prefix=boost_msvc install
b2 toolset=msvc --build-type=complete -j4 --prefix=boost_msvc2015 install

И опять долгий долгий процесс сборки.

Не забудьте удалить путь из переменной Path.

Подготовка Qt проекта

Создадим простой проект с виджетами с кнопкой PushButton и полем для вывода текста TextEdit. Для тех кто не знает — скриношты по под сплойером.

Создание проекта

Идем в файл проекта .pro.

Там подключите Boost библиотеку.

1
2
3
4
5
win32-g++ {
    INCLUDEPATH += C:/boost/boost_mingw_53_32/include/boost-1_64
} else:win32-msvc* {
    INCLUDEPATH += C:/boost/boost_msvc/include/boost-1_64
}

Обратите внимание на то, в какую сторону повернуты слэши.

Пути к папкам поменяйте на свои.

Зайдите в папку include скомпилированной библиотеки.

Название этот папки вставьте сюда.

В дальнейшем вам нужно будет добавлять тут еще библиотеки, которые вы будете использовать. Подключаете их через LIBS.

Если вы не подключите их, то будете видеть подобные ошибки.

Для примеров ниже мне нужно было добавить одну библиотеку. Получилось вот так.

1
2
3
4
5
6
7
8
9
win32-g++ {
    INCLUDEPATH += C:/boost/boost_mingw_53_32/include/boost-1_64
    LIBS += "-LC:/boost/boost_mingw_53_32/lib" \
            -llibboost_date_time-mgw53-mt-1_64
} else:win32-msvc* {
    INCLUDEPATH += C:/boost/boost_msvc2015/include/boost-1_64
    LIBS += "-LC:/boost/boost_msvc2015/lib" \
            -llibboost_date_time-vc140-mt-gd-1_64
}

Обратите внимание, что перед путями и названием библиотеки появляется -L или -l.

Если вам нужно подключить несколько библиотек, то добавляете их подобным образом.

1
2
3
4
5
6
7
8
9
10
11
win32-g++ {
    INCLUDEPATH += C:/boost/boost_mingw_53_32/include/boost-1_64
    LIBS += "-LC:/boost/boost_mingw_53_32/lib" \
            -llibboost_date_time-mgw53-mt-1_64 \
            -llibboost_system-mgw53-mt-1_64
} else:win32-msvc* {
    INCLUDEPATH += C:/boost/boost_msvc2015/include/boost-1_64
    LIBS += "-LC:/boost/boost_msvc2015/lib" \
            -llibboost_date_time-vc140-mt-gd-1_64 \
            -llibboost_system-vc140-mt-gd-1_64
}

Обратите внимание на то, что для разных компиляторов одна и та же библиотека, например, libboost_date_time хранится в разных файлах, например с названием (без расширения) libboost_date_time-mgw53-mt-1_64 и libboost_date_time-vc140-mt-gd-1_64.

Если после внесения изменений и сохранения файла у вас кнопка запуска проекта горит зеленым, то всё прошло хорошо. Если серым, то где-то напортачили.

Перейдем в файл mainwindow.cpp.

Проверка №1

Выведем седьмое простое число через функцию prime().

a href=”http://www.boost.org/doc/libs/1_64_0/libs/math/doc/html/math_toolkit/number_series/primes.html”>Функция является одной из специальных математических функций.

Подключаем инклуд:

1
#include <boost/math/special_functions/prime.hpp>

И включаем соответствующее пространство имен.

1
using namespace boost::math;

Теперь в коде клика кнопки можем прописать.

1
2
boost::uint32_t k = prime(7);
ui->textEdit->insertPlainText(QString::number(k) + "\n");

Проверка №2

Проверим сколько дней прошло с 1 января.

Подключаем инклуд.

1
#include "boost/date_time/gregorian/gregorian.hpp"

И включаем соответствующее пространство имен.

1
using namespace boost::gregorian;

Теперь в коде клика кнопки можем прописать.

1
2
3
4
5
date today = day_clock::local_day();
partial_date new_years_day(1,Jan);
days days_since_year_start = today - new_years_day.get_date(today.year());
 
ui->textEdit->insertPlainText(QString::number(days_since_year_start.days()) + "\n");

Полный код.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <boost/math/special_functions/prime.hpp>
#include "boost/date_time/gregorian/gregorian.hpp"
 
using namespace boost::math;
using namespace boost::gregorian;
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
    boost::uint32_t k = prime(7);
    ui->textEdit->insertPlainText(QString::number(k) + "\n");
}
 
void MainWindow::on_pushButton_2_clicked()
{
    date today = day_clock::local_day();
    partial_date new_years_day(1,Jan);
    days days_since_year_start = today - new_years_day.get_date(today.year());
 
    ui->textEdit->insertPlainText(QString::number(days_since_year_start.days()) + "\n");
 
}

Вот и всё!

Исходники проекта

P.S. Жесть, а не установка. Не нравится мне эта библиотека.


Статьи по теме:

  1. Установка Qt
  2. Интерпретатор функции в Qt - QtScript
  3. Сложение двух чисел в Qt 5.6.0 на C++ (Qt Quick Controls)
  4. Сложение двух чисел в Qt 5.6.0 на C++ (Qt Labs Controls)

IT Boost, C++, Qt, Установка

© 2014 Harrix