У меня проблема с использованием библиотеки GMP в проекте Qt под Windows XP SP2.
Когда я запускаю свое приложение Qt, иногда оно работает, а иногда нет.Когда происходит сбой приложения, оно отображает предупреждение с сообщением «Ошибка времени выполнения библиотеки Microsoft Visual C ++» или зависает на несколько минут.Иногда это работает (и ошибки нет)
Вот некоторые особенности:
Я использовал компилятор QT ver 4.3.2 (с открытым исходным кодом): mingw32 ver: GNU Make 3.80 GCC: 3.4.5 (mingw special) G ++: 3.4.5 (mingw special) gmp 4.3.2 тип моего процессора: семейство x86
Я успешно скомпилировал библиотеку GMP, используя MSYS 1.0.11:
. / Configure --prefix = / gmp / install --enable-cxx
make
make install
Вот мой Qt pro.содержимое файла:
..
..
INCLUDEPATH += C:/LIBGMP
LIBS += -LC:/LIBGMP -lgmpxx -lgmp
Вот часть моей прикладной функции в Qt с использованием библиотеки GMP:
QString gmptambah(QString angka1 ,QString angka2,int angkapresisi) const
{
mpf_set_default_prec(angkapresisi);
mpf_t x,y,z;
mpf_init (x);
mpf_init (y);
mpf_init (z);
QByteArray encodedString1=angka1.toAscii ();
const char *x1= encodedString1.constData ();
QByteArray encodedString2=angka2.toAscii ();
const char *y1= encodedString2.constData ();
mpf_set_str (x,x1,10);
mpf_set_str (y,y1,10);
mpf_add (z,y,x);
mp_exp_t exponent ;
mpf_class nilaiz(z);
nilaiz.set_prec(angkapresisi);
QString hasil((nilaiz.get_str(exponent, 10, 0)).c_str()); // this is my problem
long int exp=(exponent);
if(exp>=0)
{
if(hasil.at(0)!='-' && exp==0)
{
hasil.insert(0,"0"); exp++;
}
else if(hasil.at(0)=='-' && exp==0)
{
hasil.insert(1,"0");
exp=exp+2;
}
else if(hasil.at(0)=='-' && exp>=1)
{
exp=exp+1;
}
hasil.insert(exp,".");
hasil.replace(QString(" "), QString("0"));
QStringList hasiltmp;
hasiltmp=hasil.split(".");
if(hasiltmp.size()==1) hasil.append("0");
else if(hasiltmp.size()==2)
{
if(hasiltmp.at(1)=="")hasil.append("0");
}
}
else
{
if(hasil.at(0)!='-') for(int i=0;i<qAbs(exp);i++)hasil.insert(0,"0");
else for(int i=0;i<qAbs(exp);i++)hasil.insert(1,"0");
if(hasil.at(0)!='-') hasil.insert(0,"0.");
else hasil.insert(1,"0.");
}
mpf_clear (x);
mpf_clear (y);
mpf_clear (z);
x1=0; y1=0;
return pembulatan(hasil);
}
После отслеживания проблемы я обнаружил, что моя проблема находится на nilaiz.get_str(exponent, 10, 0)
функция, которая вызвала функцию mpf_get_str
в gmpxx.h
Когда я удаляю ее из своего приложения (без вызова функции nilaiz.get_str(exponent, 10, 0)
), приложение работает без ошибок.
НоМне нужна эта функция для преобразования mpf_t z
в QString
(строка в Qt или char *
).
Почему это происходит?Что я должен делать дальше?Или я что-то упускаю, когда я компилирую библиотеку GMP, или я должен добавить опцию xtra, когда я настраиваю GMP, или есть ошибка при использовании этой функции?
Мне нужна помощь или предложения.Спасибо!
С уважением
aansd