linux在动态库中使用STL时出现Segmentation fault.

believe_me 2012-11-30 11:31:23
下面是A.cpp文件的基本代码,编译成动态库的形式
g++ -fPIC -shared -lpthread -o libA.so

typedef std::list<std::string> StringList;
class A
{
public:
A();
public:

StringList m_listBuff;
void Init();
};

A::A()
{
m_listBuff.clear();
}
void A::Init()
{
//用gdb调试在此处调用size时候崩溃
printf("size = %d\n", m_listBuff.size());
}
A g_a;
////////////////////////////////////////////
//动态库导入
void InitSO(void) __attribute__((constructor));

void InitSO(void)
{
g_a.Init();
}


编译成so后,将so编译时加入测试程序Test.cpp,测试程序什么都不做。
g++ -g Test.cpp -o Test -L. -lA

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char * argv [])
{
getchar();
return 0;
}



然后用gdb调试Test,在动态库初始化的时候,调用void A::Init()总会出现Segmentation fault.
难道在在动态库中不能调用string的size获取大小么?
...全文
253 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-12-03
  • 打赏
  • 举报
回复
进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
wintree 2012-11-30
  • 打赏
  • 举报
回复
程序分段。。。。内存没搞好!!! A::A(){ m_listBuff.clear();}
xumaojun 2012-11-30
  • 打赏
  • 举报
回复
看看此时类的各个成员变量,段错误一般是非法指针导致的.
believe_me 2012-11-30
  • 打赏
  • 举报
回复
已经发现问题所在,谢谢各位答复。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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