win xP SP2下QT中使用gmp库的问题
我在 Windows XP SP2 下的 Qt 项目中使用 GMP 库时遇到问题。
当我运行 Qt 应用程序时,有时可以运行,有时则不能。当应用程序崩溃时,它会显示一条警告,并显示消息“Microsoft Visual C++ 运行时库运行时错误”或挂起几分钟。有时它可以工作(并且没有错误)
以下是一些细节:
我使用 QT 版本 4.3.2(开源) 编译器:mingw32 版本:GNU Make 3.80 GCC:3.4.5(mingw 专用) G++:3.4.5(mingw 专用) GMP 4.3.2 我的CPU类型:x86系列
我已经使用MSYS 1.0.11成功编译了GMP库:
./configure --prefix=/gmp/install --enable-cxx
制作
进行安装
这是我的 Qt pro.file 内容:
..
..
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)
函数,
当我删除它时, 它调用了 gmpxx.h
中的 mpf_get_str
函数从我的应用程序(没有调用 nilaiz.get_str(exponent, 10, 0)
函数),应用程序运行良好,没有错误。
但我需要该函数将 mpf_t z
转换为 QString
(Qt 中的字符串或 char *
)。
为什么会出现这种情况?接下来我应该做什么?或者我在编译 GMP 库时是否遗漏了某些内容,或者在配置 GMP 时是否应该添加 xtra 选项,或者使用该函数时存在错误?
我需要帮助或建议。谢谢你!
最好的
问候
I have a problem using the GMP library in a Qt project under Windows XP SP2.
When I run my Qt application, sometimes it works and sometimes it doesn't. When the application crashes, it display a warning with the message "Microsoft Visual C++ runtime Library run time error" or hangs for a few minutes. Sometimes it works (and there is no error)
Here are some specifics:
i used QT ver 4.3.2 (open source)
compiler: mingw32 ver : GNU Make 3.80
GCC : 3.4.5 (mingw special)
G++ : 3.4.5 (mingw special)
gmp 4.3.2
my cpu type :x86 family
I had compiled the GMP library successfully like this using MSYS 1.0.11:
./configure --prefix=/gmp/install --enable-cxx
make
make install
Here are my Qt pro.file contents :
..
..
INCLUDEPATH += C:/LIBGMP
LIBS += -LC:/LIBGMP -lgmpxx -lgmp
Here is a part of my application function in Qt using GMP library :
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);
}
After tracing the problem, I found that my problem is located at nilaiz.get_str(exponent, 10, 0)
function which called the mpf_get_str
function in gmpxx.h
When I remove it from my application (without calling the nilaiz.get_str(exponent, 10, 0)
function), the application runs well without errors.
But I need that function to convert mpf_t z
to QString
(string in Qt or char *
).
Why does this happen? What should I do next? Or am I missing something when I compile the GMP library or should I add an xtra option when I configure GMP or there is a bug using that function?
I need help or suggestions. Thank you!
Best regards
aansd
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论