Я скачал и собрал Boost 1.55 из исходников. Пытаюсь использовать Boost-log. В базовом случае (http://boost-log.sourceforge.net/libs/log/doc/html)/log/tutorial.html#log.tutorial.trivial он работает нормально без каких-либо проблем, но когда я пытаюсь использовать более продвинутый функции (например, http://boost-log.sourceforge.net/libs/log/example/doc/tutorial_fmt_stream.cpp) я получаю эту ошибку:
main.obj: ошибка LNK2019: неразрешенный внешний символ "void __cdecl boost :: filesystem :: path_traits :: convert (char const *, char const *, class std :: basic_string, class std :: allocator> &, class std :: codecvt const &) "(? convert @ path_traits @ filesystem @ boost @@ YAXPBD0AAV? $ basic_string @ GU? $ char_traits @ G @ std @@ V? $ allocator @ G @ 2 @@ std @@ ABV? $ codecvt @ GDH @ 5 @@ Z), на которую ссылается функция "void __cdecl boost :: filesystem :: path_traits :: dispatch, class std :: allocator>> (class std :: basic_string, class std :: allocator> const &, class std :: basic_string, class std :: allocator> &, class std :: codecvt const &) "(?? $ dispatch @ V? $ basic_string @ GU? $ char_traits @ G @ std @@ V? $ allocator @ G @ 2 @@ std @@@ path_traits @ filesystem @ boost @@ YAXABV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ AAV? $ basic_string @ GU? $ char_traits @ G @ std @@ V? $ allocator @ G @ 2 @@ 4 @ ABV? $ codecvt @ GDH @ 4 @@ Z)
1> main.obj: ошибка LNK2019: неразрешенный внешний символ "void __cdecl boost :: log :: v2s_mt_nt5 :: aux :: code_convert (unsigned short const *, unsigned int, class std :: basic_string, class std :: allocator> & , class std :: locale const &) "(? code_convert @ aux @ v2s_mt_nt5 @ log @ boost @@ YAXPBGIAAV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @ @ ABVlocale @ 6 @@ Z), на которую ссылается функция "private: void __thiscall boost :: log :: v2s_mt_nt5 :: basic_formatting_ostream, class std :: allocator> :: align_write (unsigned short const *, __ int64)" (?? $ align_write @G @? $ Basic_formatting_ostream @ DU? $ Char_traits @ D @ std @@ V? $ Allocator @ D @ 2 @@ v2s_mt_nt5 @ log @ boost @@ AAEXPBG_J @ Z)
1> main.obj: ошибка LNK2019: неразрешенный внешний символ "public: static class std :: codecvt const & __cdecl boost :: filesystem :: path :: codecvt (void)" (? Codecvt @ path @ filesystem @ boost @@ SAABV ? $ codecvt @ GDH @ std @@ XZ) упоминается в функции "public: __thiscall boost :: filesystem :: path :: path (char const (&) [14], void *)" (?? $? 0 $$ BY0O @ $$ CBD @ путь @ файловая система @ boost @@ QAE @ AAY0O @ $$ CBDPAX @ Z)
Таким образом, он не может найти функции convert (...), code_convert (...) и codecvt (...) в файлах .lib.
Я уже пытался добавить все библиотеки релизов (файлы .lib, созданные во время сборки) в «дополнительные библиотеки», и в целом я думаю, что визуальная студия находит все библиотеки, но не может найти эти функции в библиотеках. Есть идеи, как я могу это исправить?
Я создал Boost 1.55 из исходного кода, используя 32-разрядную версию Visual Studio 2010 (msvc10.0), выпуск и отладку. Работаю на windows 7 x64.
unsigned short
выглядит подозрительно. Убедитесь, что вы скомпилировали все с параметром / Zc: wchar_t, т.е. wchar_t - это собственный тип. - person Igor R.   schedule 20.12.2013#defines
) для boost.log в своем проекте, которые использовались при компиляции исходников? В нашем случае мы должны были обязательно использоватьBOOST_LOG_NO_THREADS
в проектах, включая заголовки boost.log, иначе мы получим другие, хотя и одинаково раздражающие ошибки компоновщика. - person Jay   schedule 29.01.2014