0

誰かがこれをやったことがありますか?

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/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

私は、MySQL ライブラリが適切に .a ライブラリに変換された WindowsXP と MinGW32 を使用した Linux (Linux からの出力で、Windows とほぼ同じ) の両方でテストしました。

人々... 私はオプションを使い果たしています. 手がかりはありますか?? 誰かが以前に MySQL と MinGW で働いたことがありますか?? Cygwinで動作しますか??

回答に時間がかかる場合は、事前に感謝します。

4

3 に答える 3

1

これも推測ですが、math.h AND config-win.h に rint という関数があるように見えます。同じ名前の関数が 2 つ存在しないことを確認してください。

ところで、私は完全には確信が持てないので、このコミュニティを編集可能にしています。間違っている場合は、この投稿を自由に編集してください。

于 2008-10-07T12:23:15.907 に答える
0

わかりました私はそれを解決しました。

私のばかは間違ったファイルを含めていました。mingw でそれを行うには、<config-win.h> ではなく <windows.h> を #include する必要があります

とにかくありがとう!!!

于 2008-10-09T16:26:12.797 に答える
0

問題のスタックはわかりませんが、どういうわけか math.h が二重に含まれていると思います。math.h ファイルを見てください。上部近くのどこかにインクルード ガードが必要です。インクルード ガードの概念に慣れていない場合は、リンクをたどってください。両方の場所で、インクルード ガードを使用して math.h をインクルードする必要があります。

Linux に固有の #define を探すこともできます。どこかに #define があるため、Linux ではファイルが 2 回インクルードされない場合があります。

おっしゃる通り、これはあくまでも推測です。

于 2008-10-07T11:31:46.667 に答える