linux 段错误,我快疯了,搞了两天了

lvbinandylau 2008-08-28 02:48:57
Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /opt/SinoVoice/jTTS-5.0.1.0/bin/libjTTS_ML.so...done.
Loaded symbols for /opt/SinoVoice/jTTS-5.0.1.0/bin/libjTTS_ML.so
Reading symbols from /opt/SinoVoice/jTTS-5.0.1.0/bin/libjTTS_Audio.so...done.
Loaded symbols for /opt/SinoVoice/jTTS-5.0.1.0/bin/libjTTS_Audio.so
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/tls/libpthread.so.0...done.
Loaded symbols for /lib/tls/libpthread.so.0
Reading symbols from /usr/lib/libstdc++.so.6...done.
Loaded symbols for /usr/lib/libstdc++.so.6
Reading symbols from /lib/tls/libm.so.6...done.
Loaded symbols for /lib/tls/libm.so.6
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0 0x00c89f68 in ?? ()
(gdb) bt
#0 0x00c89f68 in ?? ()
#1 0x001f3597 in exit () from /lib/tls/libc.so.6
#2 0x001ddded in __libc_start_main () from /lib/tls/libc.so.6
#3 0x08048a05 in _start ()
(gdb)

程序大概是这样的
test调用a.so,然后a.so中调用b.so。
程序出现段错误以后,就是上面的内容。谁知道这什么问题啊。我快疯了。!!!!!!!
...全文
871 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
rayhua86 2009-05-18
  • 打赏
  • 举报
回复
LS的方法好...
xiaoyaoyoudm 2008-08-29
  • 打赏
  • 举报
回复
如果有.so的代码,建议:
1.将.so静态链接到主程序。
2.直接测试.so的代码。
3.使用purify等测试工具,查看内存错误。
Joey_cc 2008-08-29
  • 打赏
  • 举报
回复
试试先把.so都编译成.o然后静态链接有没有问题?静态链接调试方便些吧
rzsheng 2008-08-29
  • 打赏
  • 举报
回复
就这么几行代码,先全部注释掉,然后从前往后一句接一句的打开,看看到底是哪句话出现的段错误。

段错误往往是由于操作内存指针不当出现的。一句一句的测试,总会找到问题的。
lvbinandylau 2008-08-28
  • 打赏
  • 举报
回复
还是没有找到什么错误啊。
具体的思路是这样的
test调用libjTTS_ML.so
然后libjTTS_ML.so里面显式调用6个通用接口。

其中有两个so,都实现了这6个通用接口
其中一个调用就没有出现段错误。
但另外一个就出现了。

各位有什么好的调试so的方法没有啊。

各位牛人,救救俺吧。
lvbinandylau 2008-08-28
  • 打赏
  • 举报
回复
好的,上面的方法我一个个的试过去
Joey_cc 2008-08-28
  • 打赏
  • 举报
回复
在exit()中会关闭所有文件,可能是文件操作的问题。检查一下jTTS_PlayToFile中是怎么处理szToFile的。
快乐田伯光 2008-08-28
  • 打赏
  • 举报
回复
用用的是C++, 编译的时候有没有什么告警之类的东西?
快乐田伯光 2008-08-28
  • 打赏
  • 举报
回复
试着把那些变量定义放到函数的开头试试, 不要在函数中间间插定义变量
lvbinandylau 2008-08-28
  • 打赏
  • 举报
回复

#include "jTTS_ML.h"
#include <stdlib.h>
#include <pthread.h>

#define PRINT printf

#define MAX_PATH 512

int main()
{
ERRCODE err = ERR_NONE;
err = jTTS_Init(NULL, NULL);
if(err != ERR_NONE)
{
PRINT("jTTS_Init error . err = %d \n", err);
return -10;
}
PRINT("jTTS_Init successful .\n");

char szVoiceId[40] = "3AE556A0-25C2-4C6E-8A22-2CC9B1B4FB8E";
DWORD dwCodePage = CODEPAGE_UTF8;
char *szText = NULL;

FILE *fp = fopen("English.txt", "r");
fseek(fp, 0, SEEK_END);
DWORD dwLen = ftell(fp);
fseek(fp, 0, SEEK_SET);

szText = new char[dwLen + 1];
memset(szText, 0, dwLen + 1);

fread(szText, 1, dwLen, fp);
fclose(fp);
char szToFile[MAX_PATH] = "English.wav";

JTTS_CONFIG jCfg;
memset(&jCfg, 0, sizeof(JTTS_CONFIG));
jTTS_Get(&jCfg);
memcpy(jCfg.szVoiceID, szVoiceId, 40);
jCfg.nCodePage = dwCodePage;

err = jTTS_PlayToFile(szText, szToFile, FORMAT_WAV, &jCfg, PLAYMODE_SYNC, 0, 0);

delete []szText;

if (err != ERR_NONE)
{
printf("jTTS_PlayToFile return %d\n", err);
return -10;
}

err = jTTS_End();
if(err != ERR_NONE)
{
PRINT("jTTS_End failed . err = %d\n", err);
return -40;
}
printf("jTTS_End successful . err = %d\n", err);

return 0;
}


printf("jTTS_End successful . err = %d\n", err);
这一句已经执行完毕了,还报段错误,很郁闷啊。
realdragon2 2008-08-28
  • 打赏
  • 举报
回复
贴下代码看看.
nevil 2008-08-28
  • 打赏
  • 举报
回复
?? () 栈出错了...最好能贴代码.

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧