Я пытался отладить ссылку ошибка 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) Есть ли у кого-нибудь какие-либо идеи о том, как решить ошибку, перечисленную выше, случайно?
Любая помощь будет оценена!
Кажется, что есть некоторое несоответствие между бустом dll, с которым вы ссылаетесь, и файлом заголовка буста, с которым вы компилируете. т. е. ваш заголовочный файл определяет filesystem3
пространство имен, для которого нет символов в dll.
Согласно Boost.FileSystem документы, наиболее вероятный сценарий — ваши заголовки относятся к версии Boost 1.46 или 1.47, где поддерживаются обе файловые системы v2 и v3, но по умолчанию используется v3, в то время как ваша dll предназначена для повышения 1.48 или выше, в этот момент v2 больше не включается, а v3 по умолчанию (без выделенного filesystem3
Пространство имен).
Других решений пока нет …