Я работаю с GCD в C++ с помощью xdisptach, libdispatch в Visual Studio 2012 в Windows 7.
Я объявляю класс с глобальной переменной, которая представляет собой очередь отправки. Другие функции в классе вызывают функцию очереди. Все компилируется отлично, за исключением случаев, когда я создаю очередь в конструкторе.
xdispatch::queue* dispatch_queue;
AsyncNode()
{
dispatch_queue = new xdispatch::queue(Name);
}
Когда dispatch_queue = новая xdispatch :: queue (Имя); закомментирован, все это прекрасно компилируется. В противном случае я получаю следующие ошибки.
Error 50 error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall xdispatch::queue::~queue(void)" (__imp_??1queue@xdispatch@@UAE@XZ) referenced in function "public: virtual void * __thiscall xdispatch::queue::'scalar deleting destructor'(unsigned int)" (??_Gqueue@xdispatch@@UAEPAXI@Z)
Error 49 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall xdispatch::queue::queue(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_??0queue@xdispatch@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: __thiscall AsyncNode::AsyncNode(void)" (??0AsyncNode@@QAE@XZ)
Error 53 error LNK2001: unresolved external symbol "public: virtual void __thiscall xdispatch::object::resume(void)" (?resume@object@xdispatch@@UAEXXZ)
Error 51 error LNK2001: unresolved external symbol "public: virtual void * __thiscall xdispatch::queue::native(void)const " (?native@queue@xdispatch@@UBEPAXXZ)
Error 52 error LNK2001: unresolved external symbol "public: virtual struct dispatch_queue_s * __thiscall xdispatch::queue::native_queue(void)const " (?native_queue@queue@xdispatch@@UBEPAUdispatch_queue_s@@XZ)
Это основной сайт для xdispatch, но я не могу найти ничего с точки зрения форума или помощи с xdispatch в частности. Есть много для объективного-c....:/
http://opensource.mlba-team.de/xdispatch/docs/current/index.html
Прежде всего, поведение, связанное с удалением "проблемной" линии, является нормальным - когда вы определяете указатель, вы не вызываете какую-либо функцию, и именно по этой причине вы не получаете "нерешенных внешних ошибок".
Когда вы инициализируете переменную, вызывая конструктор, вы сталкиваетесь с проблемами, потому что пытаетесь вызвать функцию, недоступную во время ссылки.
При работе с внешними библиотеками, использующими библиотеки DLL, вы должны ссылаться на соответствующие библиотеки импорта, обычно поставляемые в виде файлов "lib". В вашем случае в zip-пакете есть папка с именем lib. Кроме того, библиотеки DLL должны располагаться во время выполнения - помещая их в папку исполняемого файла или добавляя их в переменную среды PATH.
Чтобы связаться с библиотекой, выполните следующие действия (взятые из MSDN):