Boost.Asio только для заголовка - PullRequest
16 голосов
/ 23 февраля 2011

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

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

РЕДАКТИРОВАТЬ: ASIO хочет Boost.System с библиотекой для ссылки - не может ли эта зависимость быть такой, чтобы я мог использовать только заголовок ASIO?

Ответы [ 3 ]

13 голосов
/ 23 февраля 2011

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. "

7 голосов
/ 22 ноября 2016

Принятый ответ на 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 голосов
/ 23 февраля 2011

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

Подробности приведены на этой странице (что по звукам у вас естьуже найден).

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

...