Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Why my application fails to link with Boost.Log? What's the fuss about library namespaces?

Boost , Chapter 1. Boost.Log v2 , Rationale and FAQ

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Библиотека объявляет пространство имен<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. Библиотека журнала и соответствующим образом настроить библиотеку или приложение.


PrevUpHomeNext

Статья Why my application fails to link with Boost.Log? What's the fuss about library namespaces? раздела Chapter 1. Boost.Log v2 Rationale and FAQ может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Rationale and FAQ ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 17:34:58/0.0036780834197998/0