2013-05-05 63 views
29

我正在自己寫一個小jabber客戶端。我使用Libpurple.com的代碼和Linux(Mint)一切正常。與庫鏈接的程序編譯沒有錯誤並接收消息。Libpurple無法連接 - purple_presence_is_online失敗

但是,當我在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中的版本),但仍然是相同的。關閉防火牆也沒有幫助。

+3

您應該啓用日誌記錄功能(https://developer.pidgin.im/wiki/CHowTo/DebugAPIHowTo),並嘗試找出原因purple_presence_is_online有一個NULL PTR – 2013-05-12 02:44:40

+1

你將不得不發佈的詳細信息。不同的環境會引入競爭條件或其他問題。很顯然,libpurple並不處於您期望的狀態,您需要查看需要保護的內容。 – 2013-05-14 08:59:04

+0

@工業抗抑鬱藥我應該怎麼做?我在主函數中添加了'purple_debug_set_enabled(TRUE)',但輸出中沒有一個調試信息。您發佈的鏈接顯示了我如何登錄自己的調試消息......但那不是我需要的東西,是嗎? – user1023979 2013-05-14 18:49:12

回答

0

爲什麼不使用簡單的XMPP客戶端庫,如GLOOX(http://camaya.net/gloox)而不是libPurple。 GLOOX是一個跨平臺庫,不需要Windows上的CYGWIN進行編譯。它的完整,爲所有essentail XMPP estensions提供實現。

但是,如果你想連接到其他非XMPP網絡如雅虎,Facebook,那麼libPurple肯定會是答案。

0

由於您的問題很難重現,我建議您使用調試器來調查「存在」指針來自哪裏,以及哪個代碼塊將其設置爲NULL。然後你可以問「爲什麼purple_stupid_function()返回一個NULL指針」,這更容易回答。

0

我最後一次看LibPurple(幾年前)時,我只能使用MinGW而不是Cygwin。

1

幾點需要注意:

  1. 每個OS都有自己的問題,程序部署時。所以,請忽略您的客戶端使用Linux的事實。從事實開始,您的程序/ libpurple在Windows中不起作用。

  2. 嘗試查看是否存在使用相同代碼路徑(斷言失敗的函數)併成功的客戶端(pidgin等)。這是做基本的健全性檢查,libpurple代碼實際上可用在該環境中(Cygwin)

  3. 如果您的客戶端和服務器之間有任何流量,請嘗試獲取wireshark流量轉儲,並將其與工作(Linux)和失敗(Cygwin)環境。