2013-05-05 36 views
29

Tôi tự viết cho mình một ứng dụng khách nhỏ. Tôi đã sử dụng mã từ Libpurple.com và trên Linux (Mint) mọi thứ hoạt động tốt. Với thư viện liên kết chương trình biên dịch không có lỗi và nhận tin nhắn.Libpurple không thể kết nối - purple_presence_is_online không thành công

Nhưng khi tôi sử dụng cùng một mã trên Windows 7, liên kết tất cả các thư viện cần thiết và cài đặt Cygwin và PATH, chương trình biên dịch không có lỗi, nhưng sau đó NetBeans (IDE tôi sử dụng trong Windows và Linux) nói 'RUN FAILED'

Khi tôi chạy chương trình từ cửa sổ dòng lệnh nó nói:

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

và sau đó nó đóng băng. Tôi đã cố gắng trở lại libpurple 2.10.3 (phiên bản tôi có trong Linux) nhưng vẫn như cũ. Tắt tường lửa cũng không giúp được gì.

+3

Bạn nên cho phép các cơ sở khai thác gỗ (https://developer.pidgin.im/wiki/CHowTo/DebugAPIHowTo) và cố gắng tìm hiểu xem tại sao purple_presence_is_online có một ptr NULL –

+1

Bạn sẽ phải gửi thêm thông tin . Một môi trường khác có thể giới thiệu các điều kiện chủng tộc hoặc các vấn đề khác. Rõ ràng là libpurple không ở trạng thái bạn đang mong đợi và bạn cần phải xem xét những gì cần bảo vệ để bảo vệ điều đó. –

+0

@ Công nghiệp-thuốc chống trầm cảm Làm thế nào tôi nên làm điều đó? Tôi đã thêm 'purple_debug_set_enabled (TRUE)' vào hàm chính của mình nhưng không phải là một thông tin gỡ lỗi duy nhất trên đầu ra. Liên kết bạn đăng cho thấy cách tôi có thể đăng nhập thông báo gỡ lỗi của riêng mình ... nhưng đó không phải là điều tôi cần, phải không? – user1023979

Trả lời

0

Tại sao không sử dụng thư viện máy khách XMPP đơn giản như GLOOX (http://camaya.net/gloox) thay vì libPurple. GLOOX là một thư viện nền tảng chéo mà không cần CYGWIN trên Windows để biên dịch. Và nó hoàn chỉnh, cung cấp việc thực hiện cho tất cả các thuộc tính XMPP essentail.

Tuy nhiên, nếu bạn muốn kết nối với các mạng không phải XMPP khác như Yahoo, Facebook, thì libPurple chắc chắn sẽ là câu trả lời.

0

Vì vấn đề của bạn khó tái sản xuất, tôi khuyên bạn nên sử dụng trình gỡ lỗi để điều tra con trỏ "hiện diện" xuất hiện ở đâu và khối mã nào đặt nó thành NULL. Sau đó, bạn có thể hỏi "tại sao purple_stupid_function() trả về một con trỏ NULL" dễ dàng hơn nhiều để trả lời.

0

Lần cuối cùng tôi xem LibPurple (năm trước) Tôi chỉ có thể làm việc với MinGW chứ không phải Cygwin.

1

Vài điều cần lưu ý:

  1. Mỗi hệ điều hành có vấn đề riêng của mình khi một chương trình được triển khai. Vì vậy, bỏ qua thực tế là khách hàng của bạn đang làm việc trong Linux. Bắt đầu với thực tế, chương trình/libpurple của bạn không hoạt động trong Windows.

  2. Hãy thử xem có khách hàng (pidgin, v.v.) sử dụng cùng một đường dẫn mã (hàm mà xác nhận không thành công) và thành công hay không. Điều này là để kiểm tra tính chính xác cơ bản rằng mã libpurple trong thực tế có thể sử dụng được trong môi trường đó (Cygwin)

  3. Nếu có bất kỳ lưu lượng nào giữa máy khách và máy chủ, hãy thử lấy lưu lượng truy cập wireshark và so sánh nó (Linux) và môi trường thất bại (Cygwin).

Các vấn đề liên quan