Я полностью озадачен этой проблемой и не могу понять, как решить эту проблему.
По сути, я скомпилировал библиотеку gloox в Visual Studio 2010 (которая прекрасно работала с незначительными изменениями) и получил файлы .lib и .dll. Сейчас я пытаюсь использовать это в другой программе, которая использует много глокс-функций. Я могу связать большинство символов в порядке, кроме одного:
1>test.obj : error LNK2001: unresolved external symbol "class
std::basic_string<char,struct std::char_traits<char>,
class std::allocator<char> >
const gloox::EmptyString" (?EmptyString@gloox@@3V?$basic_string@DU?$
char_traits@D@std@@V?$allocator@D@2@@std@@B)
Когда я делаю подробное связывание моей программы, я вижу, что все другие символы из gloox lib связаны с штрафом:
1> Searching ..\..\lib\lib\gloox 1.0.lib:
1> Found "public: virtual __thiscall gloox::Message::~Message(void)" (?? 1Message@gloox@@UAE@XZ)
1> Referenced in test.obj
1> Loaded gloox 1.0.lib(gloox 1.0.dll)
1> Found "public: __thiscall gloox::Message::Message(enum gloox::Message::MessageType,class gloox::JID const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Message@gloox@@QAE@W4MessageType@01@ABVJID@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@222@Z)
1> Referenced in test.obj
1> Loaded gloox 1.0.lib(gloox 1.0.dll)
1> Found "public: void __thiscall gloox::ClientBase::registerPresenceHandler(class gloox::PresenceHandler *)" (?registerPresenceHandler@ClientBase@gloox@@QAEXPAVPresenceHandler@2@@Z)
1> Referenced in test.obj
1> Loaded gloox 1.0.lib(gloox 1.0.dll)
...
Так что я подумал, может символ не экспортируется правильно, и я сделал это:
dumpbin.exe / exports gloox 1.0.lib
И среди прочего я видел это:
??_FXHtmlIM@gloox@@QAEXXZ (public: void __thiscall gloox::XHtmlIM::`default constructor closure'(void))
?EmptyString@gloox@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@B (class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const gloox::EmptyString)
?GLOOX_CAPS_NODE@gloox@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@B (class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const gloox::GLOOX_CAPS_NODE)
Вторая строка показывает, что символ был экспортирован в порядке.
Теперь единственное различие, о котором я могу думать, состоит в том, что правильно загружаемые символы - это все функции, и этот конкретный является переменной. Тем не менее, до тех пор, пока его экспортированное право, компоновщик должен его видеть, верно?
Любая помощь будет принята с благодарностью. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Спасибо!