2012-02-08 3 views
0

Я написал этот код:libyahoo вина Сегментация

#include <libyahoo2/yahoo2.h> 
#include <libyahoo2/yahoo2_callbacks.h> 


int main() { 
    int id ; 
    char username[255] = "slam"; 
    char password[255] = "ss" ; 
    id = yahoo_init(username, password); 
    enum yahoo_status mYahoo ; 
    mYahoo = YAHOO_STATUS_AVAILABLE ; 
    yahoo_login(id , mYahoo); 


    return 0; 
} 

компилировать его, gcc -l yahoo2 y.c -o yahoo и запустить его с ./yahoo дает мне ошибку: Segmentation fault

(gdb) run 

Program received signal SIGSEGV, Segmentation fault. 
0x001379b1 in yahoo_login (id=1, initial=0) at libyahoo2.c:1735 

линия 1735 код является:

tag = YAHOO_CALLBACK(ext_yahoo_connect_async) (yd->client_id, 
     host, yss->pager_port, yahoo_connected, ccd, 0); 

и посмотреть это:

(gdb) list YAHOO_CALLBACK 
Function "YAHOO_CALLBACK" not defined. 

Как отладить это?

ответ

1

How do I debug this?

Выполните следующие команды:

(gdb) print yd->client_id 
(gdb) print yss->pager_port 

Мое предположение было бы, что один или оба из указанных выше команд не получится, потому что yd или yss является NULL.

Если да, проблема ранее в libyahoo2.c, и она (по-видимому) неправильно проверяет наличие ошибок.

Причина, по которой вы не можете list YAHOO_CALLBACK, скорее всего, это макрос. Посмотрите в libyahoo2/yahoo2_callbacks.h - это, скорее всего, будет определено там.

Кроме того, ваша ссылка командная строка:

gcc -l yahoo2 y.c -o yahoo 

полностью поддельная. Правильная командная строка должна быть:

gcc y.c -o yahoo -lyahoo2 

Вы можете прочитать this explanation понять, почему порядок источников и библиотек по вопросам командной строки.

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