Неразрешенный внешний символ в библиотеке файловой системы Boost (ошибка LNK2019)

Я пытался отладить ссылку ошибка LNK2019: неразрешенный внешний символ.
Для этого я попытался перечислить все символы в библиотеке, которая должна содержать этот символ. Однако у меня есть два вопроса:

1) Во-первых, я запутался в том, как читать расколотый символ в этой форме:

type __cdecl <SYMBOL_NAME> (<X>)

В частности, мне было интересно, что означает Икс и какова его важность? Также можно symbol_name а также Икс обмен местами вызывает ошибку компоновки?

Например, вот (demangled) определение символа в библиотеке:

void __cdecl boost::filesystem::path_traits::convert(char const * __ptr64,char const * __ptr64,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > & __ptr64,class std::codecvt<wchar_t,char,int> const & __ptr64) (void __cdecl boost::filesystem::path_traits::convert(char const *,char const *,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > &,class std::codecvt<wchar_t,char,int> const &))

Вот ошибка связывания:

error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl boost::filesystem3::path_traits::convert(char const *,char const *,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > &,class std::codecvt<wchar_t,char,int> const &)" (__imp_void __cdecl boost::filesystem3::path_traits::convert(char const * __ptr64,char const * __ptr64,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > & __ptr64,class std::codecvt<wchar_t,char,int> const & __ptr64) referenced in function "public: __cdecl boost::filesystem3::path::path<char const [4]>(char const (&)[4],void *)" (??$?0$$BY03$$CBD@path@filesystem3@boost@@QEAA@AEAY03$$CBDPEAX@Z)

Вы можете видеть, что неразрешенный символ и существующий символ имеют свои symbol_name а также Икс местами.

2) Есть ли у кого-нибудь какие-либо идеи о том, как решить ошибку, перечисленную выше, случайно?

Любая помощь будет оценена!

2

Решение

Кажется, что есть некоторое несоответствие между бустом dll, с которым вы ссылаетесь, и файлом заголовка буста, с которым вы компилируете. т. е. ваш заголовочный файл определяет filesystem3 пространство имен, для которого нет символов в dll.

Согласно Boost.FileSystem документы, наиболее вероятный сценарий — ваши заголовки относятся к версии Boost 1.46 или 1.47, где поддерживаются обе файловые системы v2 и v3, но по умолчанию используется v3, в то время как ваша dll предназначена для повышения 1.48 или выше, в этот момент v2 больше не включается, а v3 по умолчанию (без выделенного filesystem3 Пространство имен).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]