2008-10-07 48 views
0

有人曾经这样做过吗?用C++编译用mysql,pthreads和gtk

我想用MinGW编译使用MySQL库的程序。我不断收到函数'rint'被重新定义的消息。好的,这个函数的确在函数中都是来自MySQL的config-win.h文件和来自标准库的math.h文件,但是它们都是假设没有问题的库。

#include <iostream> 
#include <my_global.h> 
#include <mysql.h> 
using namespace std; 

int main() { 
    cout << "Hello World!!!" << endl; // prints Hello World!!! 
    return 0; 
} 

这是命令以及输出我发出编译

i586的-mingw32msvc-CC:

打破我的头,即使这同时我想,这不会编译后-I的/ usr /包括/ MySQL的probando.cpp -w

In file included from /usr/include/mysql/my_global.h:73, 
       from probando.cpp:10: 
/usr/include/mysql/config-win.h: In function ‘double rint(double)’: 
/usr/include/mysql/config-win.h:229: error: redefinition of ‘double rint(double)’ 
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/math.h:635: error: ‘double rint(double)’ previously defined here 

我已经在WindowsXP使用MinGW测试它二者,与MySQL库prope使用MinGW32在.a库和Linux(输出来自Linux,几乎与Windows相同)中转换。

人们......我缺少选择......任何线索?有人曾与MySQL和MinGW工作?它可以与Cygwin一起工作吗?

如果您花时间回答,请提前致谢。

回答

0

我不知道堆栈有问题,但我的猜测是,不知怎的,math.h得到双重包括。看看math.h文件。在顶部附近应该有一个include guard。如果您不熟悉包含警卫的概念,请点击链接。在这两个地方你都应该使用包含守卫来包含math.h。

您可能还会寻找特定于Linux的#define;由于#define在某处,文件可能不会在Linux上包含两次。

正如我所说,这只是一个猜测。

1

另外一个猜测,但它看起来好像math.h和config-win.h有一个名为rint的函数,请确保没有两个名称相同的函数。

顺便说一句,因为我不完全确定,我让这个社区是可编辑的,如果我不正确,请随时编辑这篇文章。

0

好吧,我解决了它。

我的愚蠢是包括错误的文件。要做到这一点你必须#include <windows.h>而不是< config-win.h >

谢谢反正!!!