2

システムでコンパイルして実行するプロジェクトがありますが、サーバーで実行しようとすると、コンパイル時エラーが発生します。これが、システムでコンパイルするために使用するMakefileの部分です。

CC =  gcc
CFLAGS = -g -Wall
COMPLILEFLAGS = `mysql_config --include`
LINKERINFO = `mysql_config --cflags --libs`

exec: main.o
    $(CC) $(CFLAGS) -o exec main.o $(LINKERINFO)

main.o: main.c
    $(CC) $(CFLAGS) $(COMPLILEFLAGS) -c main.c

サーバーで同じファイルを実行すると、次のエラーが発生します。

gcc -g -Wall -I/usr/include/mysql -c main.c
In file included from main.c:13:
/usr/include/mysql/my_global.h:688: error: redefinition of typedef ‘my_bool’
/usr/include/mysql/mysql.h:55: note: previous declaration of ‘my_bool’ was here
In file included from main.c:13:
/usr/include/mysql/my_global.h:699: error: redefinition of typedef ‘my_socket’
/usr/include/mysql/mysql.h:69: note: previous declaration of ‘my_socket’ was here
In file included from main.c:13:
/usr/include/mysql/my_global.h:1102: error: redefinition of typedef ‘my_ulonglong’
/usr/include/mysql/mysql.h:132: note: previous declaration of ‘my_ulonglong’ was here
In file included from main.c:14:
/usr/include/mysql/my_getopt.h:64: warning: ‘enum loglevel’ declared inside parameter list

main.cファイルは次のとおりです。

#include <stdio.h>
#include <mysql.h>
#include <my_global.h>

int main (void)
{
    return 0;
}

誰かがこの問題の可能な回避策を提案できますか?私が欲しいのは、このコードの移植性を高めることです。私が考えることができる1つのオプションは、ファイルを作成compilerlinker、ソース内で使用して、コンパイルとリンクに使用することです。

ちなみに私はmysql-serverバージョン5.5を使用しており、サーバーにはmysql-serverバージョン5.3があります

4

1 に答える 1

1

MySQLのドキュメントを見ると、古いバージョンには、 Windowsでコンパイルするmy_global.h前に含める必要があるという警告が含まれていることがわかりました。mysql.h

インクルードの順序を逆にして、問題が解決するかどうかを確認してください。その場合、MySQLに緊急にバグを報告する必要があります。

于 2012-06-28T01:31:19.533 に答える