Компиляция в C ++ с MySQL, pthreads и GTK - PullRequest
0 голосов
/ 07 октября 2008

Кто-нибудь когда-либо делал это раньше?

Я пытаюсь использовать MinGW для компиляции программы с использованием библиотек MySQL. Я продолжаю получать сообщение о том, что функция 'rint' переопределена. Хорошо, это правда, что функция находится в обоих файлах config-win.h, из MySQL и 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 / include / 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, правильно преобразованными в библиотеки .a, так и в Linux (вывод из Linux, почти такой же, как в Windows) с MinGW32.

Люди ... У меня заканчиваются варианты ... Любые подсказки ?? Кто-то работал раньше с MySQL и MinGW ?? Может ли это работать с Cygwin ??

Заранее спасибо, если вы нашли время, чтобы ответить.

Ответы [ 3 ]

1 голос
/ 07 октября 2008

Также предположение, но похоже, что math.h И config-win.h имеют функцию с именем rint, убедитесь, что нет двух функций с одинаковыми именами.

Кстати, поскольку я не совсем уверен, я делаю это сообщество редактируемым, не стесняйтесь редактировать этот пост, если я ошибаюсь.

0 голосов
/ 09 октября 2008

Хорошо, я решил это.

Моя глупость включала не тот файл. Для этого в mingw вы должны #include , а не

В любом случае, спасибо !!!

0 голосов
/ 07 октября 2008

Я не знаю, о каком стеке идет речь, но я думаю, что каким-то образом math.h включается дважды Посмотрите на файл math.h. Где-то близко к вершине должен быть включающий охранник . Перейдите по ссылке, если вы не знакомы с концепцией включения охраны. В обоих местах вы должны включить math.h, используя охрану включения.

Вы также можете искать #defines, специфичные для Linux; файл не может быть включен дважды в Linux из-за #define где-то.

Как я уже сказал, это всего лишь предположение.

...