libyahoo分段错误

我写了这段代码:

#include  #include  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 yc -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. 

我该如何调试?

我该如何调试?

执行以下命令:

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

我的猜测是上述一个或两个命令都会失败,因为ydyss为NULL。

如果是这样,问题在libyahoo2.c中更早,并且(显然)不能正确检查错误。

你无法list YAHOO_CALLBACK的原因很可能是它是一个宏。 查看libyahoo2/yahoo2_callbacks.h – 它很可能在那里被定义。

另外,您的链接命令行:

 gcc -l yahoo2 yc -o yahoo 

完全是虚假的。 正确的命令行应该是:

 gcc yc -o yahoo -lyahoo2 

您可能希望阅读此解释,以了解为什么命令行上的源和库的顺序很重要。