Libpurple не может подключиться - ошибка purple_presence_is_online

Я пишу себе небольшой клиент Jabber. Я использовал код из Libpurple.com и в Linux (Mint) все работает отлично. Со связанными библиотеками программа компилируется без ошибок и получает сообщения.

Но когда я использую тот же код в Windows 7, связываю все необходимые библиотеки и с установленным Cygwin и установленным PATH, программа компилируется без ошибок, но тогда NetBeans (IDE, которую я использую в Windows и Linux) говорит "RUN FAILED"

Когда я запускаю программу из командной строки Windows, она говорит:

libpurple initialized. Running version 2.10.7.
** <myclient.exe:6500>: CRITICAL **: purple_presence_is_online: assertion 'presence != NULL' failed

а затем он замерзает. Я уже пытался вернуться к libpurple 2.10.3 (версия, которая у меня есть в Linux), но все так же. Отключение брандмауэра тоже не помогло.

4 ответа

Несколько вещей, чтобы отметить:

  1. Каждая ОС имеет свои проблемы при развертывании программы. Поэтому не обращайте внимания на тот факт, что ваш клиент работает в Linux. Начните с того, что ваша программа / libpurple не работала в Windows.

  2. Попытайтесь проверить, существует ли клиент ( pidgin и т. Д.), Который использует тот же путь кода (функция, где утверждение не выполняется) и успешно выполняется. Это делается для проверки работоспособности, что код libpurple действительно может использоваться в этой среде ( Cygwin)

  3. Если между вашим клиентом и сервером существует трафик, попробуйте получить дамп трафика Wireshark и сравните его между рабочей ( Linux) и сбойной ( Cygwin) средой.

В последний раз, когда я смотрел на LibPurple (много лет назад), я мог заставить его работать только с MinGW, а не с Cygwin.

Поскольку вашу проблему трудно воспроизвести, я бы посоветовал вам использовать отладчик, чтобы выяснить, откуда исходит указатель "присутствия" и какой блок кода устанавливает его в NULL. Тогда вы можете спросить "почему purple_stupid_function() возвращает нулевой указатель", на который гораздо проще ответить.

Почему бы не использовать простую клиентскую библиотеку XMPP, такую ​​как GLOOX ( http://camaya.net/gloox) вместо libPurple. GLOOX - это кроссплатформенная библиотека, для компиляции которой не требуется CYGWIN в Windows. И это завершено, обеспечивая реализацию для всех основных расширений XMPP.

Однако, если вы хотите подключиться к другим не-XMPP сетям, таким как Yahoo, Facebook, тогда libPurple определенно поможет.

Другие вопросы по тегам