разрушение стека при использовании Poco :: JSON :: Object в динамической библиотеке

Я пытаюсь построить динамическую библиотеку, в которой я использовал библиотеку Poco :: JSON.

// header file
#ifndef __MATH_H__
#define __MATH_H__

#include <cstdlib>

class math
{
public:
static math* getInstance()
{
if (NULL == m_pMath)
{
m_pMath = new math();
}
return m_pMath;
}

void releaseInstance()
{
if (NULL != m_pMath)
{
delete m_pMath;
m_pMath = NULL;
}
}

public:
int sum(int a, int b);
int sub(int a, int b);

private:
math();
virtual ~math();

private:
static math* m_pMath;
};

#endif  // __MATH_H__

// source file
#include "math.h"#include <Poco/JSON/Object.h>

math* math::m_pMath = NULL;

math::math()
{}

math::~math()
{}

int math::sum(int a, int b)
{
Poco::JSON::Object obj;  // if this declaration exists, I always got stack smashing
return a + b;
}

int math::sub(int a, int b)
{
return a - b;
}

Затем, используя команду для сборки динамической библиотеки «libmymath.so»:

g++ math.* -std=c++11 -fPIC -shared -lPocoJSON -lPocoFoundation -g -o libmymath.so

// тестовый файл

#include "math.h"#include <iostream>
using namespace std;

int main()
{
cout << "sum: " << math::getInstance()->sum(1, 2) << endl;
cout << "sub: " << math::getInstance()->sub(1, 2) << endl;
return 0;
}

команда компиляции:

g++ main.cpp -std=c++11 -Wl,-rpath=./ -L. -lmymath -o main.test

Когда я запустил main.test, я получил ошибку:

[ubuntu@ubuntu]$> ./main.test
*** stack smashing detected ***: ./main.test terminated
Aborted

Почему так происходит?
Если бы я переместил объявление «Poco :: JSON :: Object obj;» в функции «math :: sum» в конструкторе «math :: math» этого не произойдет.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]