`

交叉编译FBReader后运行总是出现 Segmentation fault

 
阅读更多

交叉编译ARM版FBReader运行之后出现 - Program received signal SIGSEGV, Segmentation fault


使用GDB跟踪了一下,果然有所发现。


现象:
Program received signal SIGSEGV, Segmentation fault.
0x403815a4 in ftell () from /lib/libc.so.6
(gdb) info stack
#0 0x403815a4 in ftell () from /lib/libc.so.6
#1 0x40122524 in ZLUnixFileInputStream::offset() const ()
from /usr/lib/libzlcore.so.0.10
#2 0x400c5704 in ZLInputStreamDecorator::open() ()
from /usr/lib/libzlcore.so.0.10
#3 0x001149b0 in ?? ()
#4 0x001149b0 in ?? ()


原因:libc.so.6中的函数ftell() 出错,根本原因是此处的myFile在某些时候为NULL
分析:修改ZLUnixFileInputStream::offset(),将ftell(myFile)改为0

*强 注* :修改此处引来另外一个问题,可能导致很多格式的书无法打开,例如epub,pdb,prc等;
原因是很多文件是需要offset的,尤其是格式比较正规的文档.
此处正确的修改应为:
long pos = 0;
if(myFile != NULL) {
pos = ftell(myFile);
}
return myNeedRepositionToStart ? 0 : pos;

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jjl_china/archive/2010/01/18/5209533.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics