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