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
我的猜测是上述一个或两个命令都会失败,因为yd
或yss
为NULL。
如果是这样,问题在libyahoo2.c中更早,并且(显然)不能正确检查错误。
你无法list YAHOO_CALLBACK
的原因很可能是它是一个宏。 查看libyahoo2/yahoo2_callbacks.h
– 它很可能在那里被定义。
另外,您的链接命令行:
gcc -l yahoo2 yc -o yahoo
完全是虚假的。 正确的命令行应该是:
gcc yc -o yahoo -lyahoo2
您可能希望阅读此解释,以了解为什么命令行上的源和库的顺序很重要。