Не могу понять, на что жалуется компоновщик

При компиляции моего проекта, в котором используется библиотека ведения журнала повышения, я получаю следующую ошибку компоновщика.

LNK2001 неразрешенный внешний символ "public: static class boost::log::v2s_mt_nt6::sources::severity_logger_mt __cdecl my_logger::construct_logger(void)" (?construct_logger@my_logger@@SA?AV?$severity_logger_mt@W4severity_level@tribute@v2s_mt_nt6 @log@boost@@@sources@v2s_mt_nt6@log@boost@@XZ)

Я не знаю, как читать это сообщение об ошибке с искаженными именами функций. Может ли кто-нибудь сказать мне понятным для человека способом, какую функцию он не может найти?


person BKS    schedule 10.11.2018    source источник
comment
Возможный дубликат stackoverflow.com/questions/12573816/   -  person forthe    schedule 10.11.2018
comment
я прочитал предоставленные ссылки, и это мне совсем не помогает, поскольку эти ответы очень общие. Пожалуйста, помогите мне понять этот конкретный сценарий.   -  person BKS    schedule 10.11.2018
comment
Вкратце: были ли вы связаны с правильными файлами библиотеки повышения (.lib)?   -  person forthe    schedule 10.11.2018
comment
Ваш компоновщик более информативен, чем большинство. Первая строка сообщает вам, что компоновщик пытается найти символ (что-то с именем, например функцию), необходимый для запуска вашей программы, но не находит его. Вторая строка содержит неискаженную информацию об этом отсутствующем символе — это функция с именем my_logger::construct_logger(void) (void означает, что она вызывается без аргументов) и тип возвращаемого значения boost::log::v2s_mt_nt6::sources::severity_logger_mt. __cdecl зависит от компилятора/системы, но описывает соглашение о вызовах вашей функции. Остальное - искаженное имя.   -  person Peter    schedule 10.11.2018
comment
... это мне совсем не помогает, так как эти ответы очень общие - Верно. Но в вопросе не хватает деталей, таких как типичная команда компиляции и команда ссылки, поэтому люди не могут рассказать вам намного больше. Почему бы не предоставить минимальный, полный и проверяемый пример, чтобы мы узнали подробности?   -  person jww    schedule 11.11.2018


Ответы (1)


Поиск в Google «неразрешенный внешний символ журнала повышения» приводит к https://www.boost.org/doc/libs/1_59_0/libs/log/doc/html/log/rationale/namespace_mangling.html (сначала выделено обращение), который описывает BOOST_LOG_DYN_LINK.

Кстати, это также самый частый ответ на SO: https://stackoverflow.com/search?tab=votes&q=%5bboost-log%5d%20linker

Однако проблемы с ABI могут сыграть свою роль, см., например. Неразрешенный внешний при использовании журнала повышения

person sehe    schedule 10.11.2018