ошибка ссылки повышения LNK2038: «boost_log_abi» «v2s_mt_nt6» не соответствует «v2_mt_nt6» - PullRequest
0 голосов
/ 09 мая 2018

что означает эта ошибка ссылки? и как это исправить

error LNK2038: “boost_log_abi” “v2s_mt_nt6” doesn't match  “v2_mt_nt6"

Я пытался

  ADD_DEFINITIONS(-DBOOST_ALL_DYN_LINK)
  ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK)
  ADD_DEFINITIONS(-DBOOST_USE_WINAPI_VERSION=0x601)

1 Ответ

0 голосов
/ 10 мая 2018

Кажется, ваша библиотека Boost.Log собрана с флагами, отличными от вашей основной программы.

Начиная с config.hpp, мы можем видеть, что означают эти названия ABI:

  • v2s_mt_nt6 статически связан с поддержкой многопоточности в Windows Vista или более поздней версии (версия 6)

  • v2_mt_nt6 динамически связан, с поддержкой многопоточности, в Windows Vista или выше (версия 6)

Макрос BOOST_LOG_DLL решает, какой из двух путей использовать. Определяется, если определены какие-либо из BOOST_LOG_DYN_LINK или BOOST_ALL_DYN_LINK.

Если вы статически связываетесь с Boost.Log (через файлы .lib или аналогичные), вы не должны определять ни один из этих двух макросов. 1

Это означает, что вы можете удалить дополнительные определения препроцессора (поскольку вы пытаетесь связать статическую библиотеку) или использовать версию Boost для динамической библиотеки (см., Например, здесь , чтобы узнать, как установить это значение). на Windows).


1 Обратите внимание, что некоторые библиотеки напрямую игнорируют эти флаги . Boost.Log, по-видимому, является одним из немногих, которые действительно вызывают проблемы, если эти макросы неправильно настроены

...