Библиотека объявляет пространство имен<boost::log
>, которое должно использоваться в клиентском коде для доступа к компонентам библиотеки. Однако внутри библиотеки используется другое вложенное пространство имен для фактической реализации. Имя пространства имен зависит от конфигурации и платформы, оно может изменяться между различными релизами библиотеки, поэтому оно никогда не должно использоваться в коде пользователя. Это делается для того, чтобы максимально синхронизировать конфигурацию библиотеки с приложением и устранить проблемы, вызванные несоответствием конфигурации.
В большинстве случаев пользователи даже не замечают существования этого внутреннего пространства имен, но оно часто появляется в ошибках компилятора и линкера, и в некоторых случаях полезно знать, как декодировать его имя. В настоящее время название пространства имен состоит из следующих элементов:
<version><linkage>_<threading>_<system>
- Компонент<
<version>
>описывает основную версию библиотеки. В настоящее время<v2
>.
- Компонент<
<linkage>
>показывает, связана ли библиотека статически или динамически.<s
>Если библиотека связана статически и пуста иначе.
- <
<threading>
><st
>для однопоточной сборки и<mt
>для многопоточной.
- Компонент<
<system>
>описывает базовый API ОС, используемый библиотекой. В настоящее время он предназначен только для многопоточной сборки. В зависимости от целевой платформы и конфигурации она может быть<posix
>,<nt5
>или<nt6
>.
В качестве пары быстрых примеров<v2s_st
>соответствует v2 статичной однопоточной сборке библиотеки и<v2_mt_posix
>— v2 динамической многопоточной сборке для POSIX системного API.
Манглинг пространства имен может привести к ошибкам ссылки, если приложение неправильно настроено. Одной из распространенных ошибок является создание динамической версии библиотеки, а не определение<BOOST_LOG_DYN_LINK
>или<BOOST_ALL_DYN_LINK
>при создании приложения, так что библиотека по умолчанию принимает статическое связывание. Всякий раз, когда появляются такие ошибки связи, можно декодировать имя пространства имен в недостающих символах и экспортируемых символах Boost. Библиотека журнала и соответствующим образом настроить библиотеку или приложение.