2013-05-05 10 views
29

Mi sto scrivendo un piccolo client di jabber. Ho usato il codice da Libpurple.com e su Linux (Mint) tutto funziona correttamente. Con librerie collegate a programmi compilati senza errori e ricevendo messaggi.Libpurple non riesce a connettersi - purple_presence_is_online fallita

Ma quando uso lo stesso codice su Windows 7, collego tutte le librerie necessarie e con Cygwin installato e PATH set, programma le compilazioni senza errori, ma NetBeans (ID I che uso in Windows e Linux) dice "RUN FAILED"

Quando eseguo programma dalla riga di comando di Windows che dice:

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

e poi congelare. Ho già provato a tornare a libpurple 2.10.3 (la versione che ho in Linux) ma sempre la stessa. Anche spegnere il firewall non è stato d'aiuto.

+3

Si dovrebbe abilitare la funzione di registrazione (https://developer.pidgin.im/wiki/CHowTo/DebugAPIHowTo) e cercare di scoprire perché purple_presence_is_online ottenuto un PTR NULL –

+1

Si sta andando ad avere per inserire ulteriori informazioni . Un ambiente diverso può introdurre condizioni di gara o altri problemi. Ovviamente Libpurple non si trova nello stato che ti aspetti e dovresti cercare ciò che è necessario proteggere per proteggerlo. –

+0

@ Antidepressivo industriale Come devo fare? Ho aggiunto 'purple_debug_set_enabled (TRUE)' alla mia funzione principale ma non una singola informazione di debug sull'output. Il link che hai postato mostra come posso registrare i miei messaggi di debug ... ma non è quello che mi serve, vero? – user1023979

risposta

0

Perché non utilizzare una semplice libreria client XMPP come GLOOX (http://camaya.net/gloox) anziché libPurple. GLOOX è una libreria multipiattaforma che non richiede CYGWIN su Windows per la compilazione. E 'completo, fornendo implementazione per tutte le estensioni XMPP di Essentail.

Tuttavia, se si desidera connettersi ad altre reti non XMPP come Yahoo, Facebook, libPurple sarà sicuramente la risposta.

0

Poiché il problema è difficile da riprodurre, suggerisco di utilizzare il debugger per indagare da dove proviene il puntatore "presenza" e quale blocco di codice lo imposta su NULL. Quindi potresti chiedere "perché purple_stupid_function() restituisce un puntatore NULL" che è molto più facile da rispondere.

0

L'ultima volta che ho guardato LibPurple (anni fa) ho potuto farlo funzionare solo con MinGW, non con Cygwin.

1

Poche cose da notare:

  1. Ogni sistema operativo ha i suoi problemi quando un programma viene distribuito. Quindi, ignora il fatto che il tuo client funziona su Linux. Inizia con il fatto che il tuo programma/libpurple non ha funzionato in Windows.

  2. Provare a vedere se c'è un client (pidgin ecc.) Che utilizza lo stesso percorso di codice (la funzione in cui l'asserzione non riesce) e ha esito positivo. Questo è per fare un controllo di base del fatto che il codice libpurple sia effettivamente utilizzabile in quell'ambiente (Cygwin)

  3. Se c'è traffico tra il client e il server, provare a ottenere un dump di traffico wireshark e confrontarlo tra il funzionamento (Linux) e in mancanza (Cygwin) dell'ambiente.