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), но все тот же. Выключение брандмауэра также не помогло.
Ответы
Ответ 1
Несколько заметок:
-
Каждая ОС имеет свои проблемы при развертывании программы. Поэтому игнорируйте тот факт, что ваш клиент работает в Linux. Начните с того, что ваша программа /libpurple не работала в Windows.
-
Попробуйте посмотреть, есть ли клиент (pidgin и т.д.), который использует тот же путь кода (функция, в которой это утверждение не выполняется), и преуспевает. Это делается для того, чтобы сделать базовую проверку здравомыслия, что код libpurple фактически используется в этой среде (Cygwin)
-
Если между вашим клиентом и сервером существует какой-либо трафик, попробуйте получить дамп трафика wirehark и сравните его между рабочей (Linux) и сбойной (Cygwin) средой.
Ответ 2
Почему бы не использовать простую клиентскую библиотеку XMPP, такую как GLOOX (http://camaya.net/gloox) вместо libPurple. GLOOX - это кросс-платформенная библиотека, которая не нужна CYGWIN для Windows для компиляции. И его полная, обеспечивающая реализацию для всех Essentail XMPP.
Однако, если вы хотите подключиться к другим сетям, отличным от XMPP, таким как Yahoo, Facebook, то libPurple определенно будет ответом.
Ответ 3
Поскольку ваша проблема трудно воспроизвести, я предлагаю вам использовать отладчик, чтобы выяснить, откуда приходит этот указатель присутствия, и какой блок кода устанавливает его в NULL. Затем вы можете спросить "почему purple_stupid_function() возвращает указатель NULL", на который гораздо легче ответить.
Ответ 4
В прошлый раз, когда я смотрел LibPurple (годы назад), я мог работать только с MinGW, а не с Cygwin.