Mysql 无法在本地计算机上运行的服务器上编译程序

Mysql 无法在本地计算机上运行的服务器上编译程序,mysql,c,database,portability,Mysql,C,Database,Portability,我有一个在我的系统上编译和运行的项目,但当我尝试在服务器上运行它时,它给出了编译时错误。以下是我用来在系统上编译它的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) mai

我有一个在我的系统上编译和运行的项目,但当我尝试在服务器上运行它时,它给出了编译时错误。以下是我用来在系统上编译它的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
主.c文件是:

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

int main (void)
{
    return 0;
}
#包括
#包括
#包括
内部主(空)
{
返回0;
}
有人能提出一个解决这个问题的可行方案吗。我只想增加这段代码的可移植性。我能想到的一个选择是使
编译器
链接器
在我的源代码中使用,并将它们用于编译和链接


顺便说一句,我使用的是mysql服务器5.5版,服务器有mysql服务器5.3版。查看mysql的文档,我发现其中包含一条警告,指出在Windows上编译时,应在
mysql.h
之前包含
my_global.h


尝试反转包含的顺序,看看这是否解决了问题。如果是这样,将立即向MySQL提交一个bug。

听起来
my_global.h
中好像有什么地方出错了。因为我们看不到代码,所以只能猜测。您应该构造一个简单的测试用例,并发布它。
my_global.h
它是mysql为客户机开发(C API)提供的库,因此它可能在每个系统上都有不同的版本,我知道,正因为如此,我的程序在我的机器上运行,而不是在服务器上运行。我认为我们不应该研究API的代码,因为如果我们这样做的话,API就没有任何用处了。我的观点有意义吗?你能用五行
foo.c
和五行
Makefile
重新创建这个错误吗?(我希望您可以)关于重新定义错误,听起来
my_global.h/my_sqli.h
包含同一文件两次或更多次。我们需要背景信息,包括该文件的重要部分代码。我的建议是包括警卫。和
my_getopt.h
我建议您在这里发布,因为此函数是在此标题中定义和声明的。@任务错误对我来说非常清楚,但有数千个系统具有数千个不同版本的这些文件。我只想让我的代码在服务器上运行,而不去碰那些头文件,因为我没有创建它们。有什么解决办法吗。你明白我不看那些文件的意思了吗?谢谢,我会的,把结果贴在这里。谢谢谢谢。它起作用了。改变文件的顺序是很愚蠢的。虽然没有必要提交一个bug,因为它在我最近下载的软件上运行良好,所以可能他们已经修复了它