2013-05-05 4 views
29

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

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

При запуске программы из окна командной строки она говорит:

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

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

+3

Вы должны включить средство протоколирования (https://developer.pidgin.im/wiki/CHowTo/DebugAPIHowTo) и попытаться выяснить, почему purple_presence_is_online получил NULL PTR –

+1

Вы собираетесь должны размещать больше информации , Другая среда может привести к условиям гонки или другим проблемам. Очевидно, что libpurple не находится в состоянии, которого вы ожидаете, и вам нужно будет посмотреть, что нужно защищать, чтобы защитить его. –

+0

@ Промышленный антидепрессант Как мне это сделать? Я добавил 'purple_debug_set_enabled (TRUE)' к моей основной функции, но не одну информацию об отладке на выходе. Ссылка, которую вы опубликовали, показывает, как я могу регистрировать свои собственные отладочные сообщения ... но это не то, что мне нужно, не так ли? – user1023979

ответ

0

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

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

0

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

0

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

1

Мало что отметить:

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

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

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

Смежные вопросы