Boost.Asio как только заголовок

Я хочу использовать библиотеку ASIO из Boost в моем проекте. Его документ говорит, что он может быть только заголовком, если regex не используется, а SSL не используется. Тем не менее, запуск bcp для asio вызывает очень много libraies, некоторые из которых с источниками, поэтому требуется компиляция, bjam и т.д.

Можно ли каким-либо образом использовать ASIO в проекте только как заголовки, без libs/source? Мне нужен только ASIO, а не другая часть Boost.

EDIT: ASIO хочет Boost.System, у которого есть ссылка lib - может ли эта зависимость не быть так, чтобы я мог использовать только заголовок ASIO?

Ответ 1

AFAIK вы можете получить неактивную версию asio из http://think-async.com/Asio/AsioAndBoostAsio

"- Boost.Asio использует библиотеку Boost.System для поддержки кодов ошибок (boost:: system:: error_code и boost:: system:: system_error). Asio включает их под собственным пространством имен (asio:: error_code и asio:: system_error). Версия Boost.System этих классов в настоящее время поддерживает лучшую расширяемость для пользовательских кодов ошибок.

- Asio имеет только заголовок файл, и для большинства целей не требуется привязка к любой библиотеке Boost. Boost.Asio всегда требует, чтобы вы связывались с библиотекой Boost.System, а также с Boost.Thread, если вы хотите запускать потоки с помощью boost:: thread. "

Ответ 2

ОБНОВЛЕНИЕ - 25.07.2009:

Как отмечено в комментарии ниже @OleThomsenBuus (спасибо!), Начиная с Boost 1.69 и выше, Boost.System теперь только для заголовков, поэтому нет необходимости перепрыгивать через все эти обручи, чтобы исключить необходимость связываться с ним.

ОРИГИНАЛЬНЫЙ ОТВЕТ:

Принятый ответ на 100% эффективен и рекомендуется, но другой вариант - если вы действительно хотите/должны использовать Boost Asio - попытаться скомпилировать ваше приложение с -DBOOST_ERROR_CODE_HEADER_ONLY. Использование этого макроса (задокументировано здесь) должно обойти необходимость связываться с Boost.System. Однако стоит прочитать предостережения, указанные в этом ответе. В частности, вам может понадобиться создать фиктивный файл CPP, содержащий:

#define BOOST_ERROR_CODE_HEADER_ONLY
#include <boost/system/error_code.hpp>

и отключите оптимизацию только для этого файла. (Лично мне не нужно было этого делать, но YMMV...)

Ответ 3

Я думаю, что bcp вытаскивает библиотеку регулярных выражений, потому что ее можно использовать (и на машинах Windows она используется по умолчанию). Я ожидаю, что вы можете удалить исходные файлы библиотеки регулярных выражений без проблем. Убедитесь, что вы добавили правильные флаги компилятора, если вы являетесь компилятором на окнах (-DBOOST_DATE_TIME_NO_LIB и -DBOOST_REGEX_NO_LIB)

Детали взяты из этой страницы (которая по звукам этого вы уже нашли).

Я не уверен, как работает умный bcp. Я не думаю, что вы можете передать ему приведенные выше определения, которые предотвращают его после маршрута mscv.