Не обращай внимания. Можно и folder, и папка, и каталог, и директория. Тут на лоре уже неоднократные срачи были по этому поводу :) но всегда найдутся ревностые красноглазики, которые кидаются на «виндовое» понятие «папка».
В чем проблема, качаем буст в исходниках, с сайта буста.
Запускаем ./bootstrap.sh(или bat для винды)
Потом ./b2
После чего в папке stage/lib находим либы для линковки.
Копируем папку с исходниками в проект, и подключаем там нужные .h по относительным путям. Настраиваем линковку. Собираем проект. По идее все.
Вопрос первый: Зачем его собирать? С большой вероятностью тебе достаточно взять только часть его заголовков, т.к. большая часть буста - header library.
Не надо так делать. Ну или ставить уже собранный с помощью пакетного менеджера. Собирать имхо надо если хочешь сделать что-то вроде моего варианта. Но учти, буст обычно статически линкуется. Ибо нет никакой гарантии, что он на конечной системе стоит. А требовать буст в зависимостей вроде не очень и принято (динамическая линковка).
Если хочешь глобально буст иметь - ставь собранный.
А ты уверен, что тебе буст нужен? Ты вообще с С++ знаком? Хотя бы из винды? С разработкой в линуксе ты не знаком, это уже понятно... Но хотя бы мертвого страуса прочитал?
Страуструпп - Принципы и практика программирования на С++ (2016)
Теперь так:
[continue@LenovoG780 programming in C++]$ g++ -std=c++11 -o async async.c++
/tmp/cccakX81.o:async.c++:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'boost::system::generic_category()'
/tmp/cccakX81.o:async.c++:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'boost::system::generic_category()'
/tmp/cccakX81.o:async.c++:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'boost::system::system_category()'
/tmp/cccakX81.o:async.c++:function boost::thread_exception::thread_exception(int, char const*): error: undefined reference to 'boost::system::system_category()'
/tmp/cccakX81.o:async.c++:function boost::detail::thread_data_base::thread_data_base(): error: undefined reference to 'vtable for boost::detail::thread_data_base'
/usr/local/bin/ld: the vtable symbol may be undefined because the class is missing its key function
/tmp/cccakX81.o:async.c++:function boost::thread::start_thread(): error: undefined reference to 'boost::thread::start_thread_noexcept()'
/tmp/cccakX81.o:async.c++:function boost::thread::~thread(): error: undefined reference to 'boost::thread::detach()'
/tmp/cccakX81.o:async.c++:function boost::thread::get_id() const: error: undefined reference to 'boost::thread::native_handle()'
/tmp/cccakX81.o:async.c++:function boost::thread::join(): error: undefined reference to 'boost::thread::join_noexcept()'
/tmp/cccakX81.o:async.c++:function boost::detail::thread_data<void (*)()>::~thread_data(): error: undefined reference to 'boost::detail::thread_data_base::~thread_data_base()'
/tmp/cccakX81.o:async.c++:typeinfo for boost::detail::thread_data<void (*)()>: error: undefined reference to 'typeinfo for boost::detail::thread_data_base'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
P.S: boost нужен для сокетов, а смысл читать книгу, если практики - не будет?
[continue@LenovoG780 programming in C++]$ g++ -o async async.c++ -lboost_system
/tmp/ccERjzLv.o:async.c++:function boost::detail::thread_data_base::thread_data_base(): error: undefined reference to 'vtable for boost::detail::thread_data_base'
/usr/local/bin/ld: the vtable symbol may be undefined because the class is missing its key function
/tmp/ccERjzLv.o:async.c++:function boost::thread::start_thread(): error: undefined reference to 'boost::thread::start_thread_noexcept()'
/tmp/ccERjzLv.o:async.c++:function boost::thread::~thread(): error: undefined reference to 'boost::thread::detach()'
/tmp/ccERjzLv.o:async.c++:function boost::thread::get_id() const: error: undefined reference to 'boost::thread::native_handle()'
/tmp/ccERjzLv.o:async.c++:function boost::thread::join(): error: undefined reference to 'boost::thread::join_noexcept()'
/tmp/ccERjzLv.o:async.c++:function boost::detail::thread_data<void (*)()>::~thread_data(): error: undefined reference to 'boost::detail::thread_data_base::~thread_data_base()'
/tmp/ccERjzLv.o:async.c++:typeinfo for boost::detail::thread_data<void (*)()>: error: undefined reference to 'typeinfo for boost::detail::thread_data_base'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
OMG. какой к херам буст и асио. Читать основы, постигать инструмент (сиреч компилятор) и уже потом только за бусты, да еще и с самостоятельной сборкой. Да и сокеты тоже...руками, все сначала руками, пока понималка не отрастет.
не надо так делать. буст - не мелкая библиотечка и копирование исходников буста идея крайне неудачная. и вообще не надо в свои микропроектики копировать весь опенсорц. отучаться надо от таких костыльных решений. в никсах для этого есть система хранения хэдеров и библиотек и в норме она всех устраивает.
думаю, что в любом дистрибе буст и так есть и его собирать не надо. тем более, что ТС явно не в теме, если официальных инструкций с сайта буста ему не хватило.
и вообще не надо в свои микропроектики копировать весь опенсорц.
Ну поставлять проект с необходимыми исходниками для статической сборки правильное решение. При чем буст имеет кучу версий. Для того, что бы быть уверенным в корректности работы твоего приложения на любой платформе надо что бы использовалась одна оттестированная версия буста.
Поэтому статик линк+копирование сорцов - норм решение имхо.
юзера не интересует, какой у тебя локально буст стоит. ему нужно, чтобы собиралось с тем, который у него в дистрибутиве. и, по-моему, это правильно и логично. поэтому при выпуске нового стабильного буста (а это случается не так уж часто) и при обновлении дистрибутивов разработчики просто проверяют свои программы с той версией, которая поставляется пользователям.
поэтому при выпуске нового стабильного буста (а это случается не так уж часто) и при обновлении дистрибутивов разработчики просто проверяют свои программы с той версией, которая поставляется пользователям.
Лишняя и ненужная работа. А для комерческих проектов так и затратная.
юзера не интересует, какой у тебя локально буст стоит. ему нужно, чтобы собиралось с тем, который у него в дистрибутиве
Юзеру нужен или рабочий бинарник. Или сорцы, которые просто собираются. Если ты поставляешь свои сорцы юзеру (заказчику) с бустом конкретной версии, то все собираться будет всегда и везде.
Лишняя и ненужная работа. А для комерческих проектов так и затратная.
как раз вполне нормальная поддержка дистрибутивов.
Если ты поставляешь свои сорцы юзеру (заказчику) с бустом конкретной версии, то все собираться будет всегда и везде.
глубокое заблуждение. буст очень зависит от процесса стандартизации и он постепенно мигрирует в стандартную библиотеку. и старые версии буста новые компиляторы не соберут, например. просто запутаются в вызовах, потому что они перешли в стандарт. такое в бусте случалось много раз и это постоянный процесс.