XDispatch C ++ Неразрешенные внешние проблемы

0

Я работаю с 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

Теги:
multithreading

1 ответ

1

Прежде всего, поведение, связанное с удалением "проблемной" линии, является нормальным - когда вы определяете указатель, вы не вызываете какую-либо функцию, и именно по этой причине вы не получаете "нерешенных внешних ошибок".

Когда вы инициализируете переменную, вызывая конструктор, вы сталкиваетесь с проблемами, потому что пытаетесь вызвать функцию, недоступную во время ссылки.

При работе с внешними библиотеками, использующими библиотеки DLL, вы должны ссылаться на соответствующие библиотеки импорта, обычно поставляемые в виде файлов "lib". В вашем случае в zip-пакете есть папка с именем lib. Кроме того, библиотеки DLL должны располагаться во время выполнения - помещая их в папку исполняемого файла или добавляя их в переменную среды PATH.

Чтобы связаться с библиотекой, выполните следующие действия (взятые из MSDN):

  1. Откройте диалоговое окно "Свойства страницы проекта". Дополнительные сведения см. В разделе Настройка свойств проекта C++.
  2. Щелкните папку Linker.
  3. Перейдите на страницу свойств входа.
  4. Измените свойство Additional Dependencies.
  • 0
    Спасибо. Я пойду над установкой снова. Я должен был проверить это намного раньше, чем доверять intellisense.
  • 0
    На самом деле, intellisense работал отлично, как и должно. Вы включили заголовочные файлы, которые содержат объявления функций, и это то, что использует intellisense. Intellisense не имеет отношения к проблемам связывания.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню