2011-05-27 23 views
0

您好我正在开发用C编写并尝试使用Mysql的CGI。 当我尝试使用它,我得到了那些未定义引用错误在这里表明,与mysql_开始的符号,如:在C和Mysql链接错误

/usr/bin/ld: Warning: type of symbol `password' changed from 2 to 1 in ../../lib /libcgi_module.a(users.o) 
../../lib/libcgi_module.a(users.o): In function `save': 
/home/jitcomm/intern_GUI/jit24_test_v2/cgi_src/cgi_module/users.c:18: multiple definition of `save' 
../../lib/libcgi_module.a(mode.o):/home/jitcomm/intern_GUI/jit24_test_v2/cgi_src/cgi_module/mode.c:56: first defined here 
../../lib/libcgi_module.a(users.o): In function `saveUser': 
users.c:(.text+0x192): undefined reference to `mysql_init' 
users.c:(.text+0x1e4): undefined reference to `mysql_real_connect' 
users.c:(.text+0x1f5): undefined reference to `mysql_error' 
users.c:(.text+0x267): undefined reference to `mysql_query' 
users.c:(.text+0x278): undefined reference to `mysql_error' 
users.c:(.text+0x2ab): undefined reference to `mysql_close' 

所以我写了一些示例代码,当我用我的节目,我可以很好地运行用此线

gcc -o saveUser $(mysql_config --cflags) saveUser.c $(mysql_config --libs) 

它运作良好。

下一步,我尝试把我的编码放在CGI中。 我仍然得到那些未定义的参考。 这是我的Makefile.basic

CC=/usr/bin/gcc 
#CC=powerpc-linux-gcc 
CP=/usr/bin/cp 
CFLAGS = -g -Wall $(mysql_config --cflags) $(mysql_config --libs) 

www=/var/www 
htdocs=/htdocs 
cgi_bin=/cgi-bin 
config=/etc/apache2/sites-available/default 

我该怎么办?哪里出问题了?请帮帮我。我一直在网上搜索一周,但仍然无法获得解决方案。我想这是在makefile.basic和链接到MySQL是错误的。

感谢

更新:

这里是我的顶层Makefile文件

ROOT=. 
    CURDIR=$(shell /bin/pwd) 
    JITCOMM_INSTALL=$(ROOT)/install 

    include $(ROOT)/Makefile.basic 

    #set root directory 
    SUB_DIRS = cgi_src 
    SUB_DIRS += check_update 
    SUB_DIRS += loadconfig 
SUB_DIRS += keepalive 
SUB_DIRS += script 
SUB_DIRS += server 
SUB_DIRS += startproxy 
SUB_DIRS += net_stats 
#SUB_DIRS += ../sniffer_gui 
#SUB_DIRS += java 

all: 
ifneq ($(SUB_DIRS),) 
     @for i in $(SUB_DIRS) ; do if [ ! -d $(CURDIR)/$${i} ]; then continue; fi; \ 
     cd $(CURDIR)/$${i}; make || exit; cd $(CURDIR); done 
endif 

clean: 
     @rm -f $(ROOT)/lib/* 
     @rm -rf $(JITCOMM_INSTALL) 
ifneq ($(SUB_DIRS),) 
     @for i in $(SUB_DIRS) ; do if [ ! -d $(CURDIR)/$${i} ]; then continue; fi; \ 
     cd $(CURDIR)/$${i}; make clean || exit; cd $(CURDIR); done 
endif 


install: all 
     @rm -rf $(JITCOMM_INSTALL) 
     @mkdir $(JITCOMM_INSTALL) 
     @mkdir $(JITCOMM_INSTALL)/etc 
     @mkdir $(JITCOMM_INSTALL)/etc/acpro 
     @mkdir $(JITCOMM_INSTALL)/etc/syslog-ng 
     @mkdir $(JITCOMM_INSTALL)/etc/apache2 
     @mkdir $(JITCOMM_INSTALL)/etc/apache2/sites-available 
     @mkdir $(JITCOMM_INSTALL)/var 
     @mkdir $(JITCOMM_INSTALL)/var/www 
     @mkdir $(JITCOMM_INSTALL)/var/www/cgi-bin 

这是我Makefile文件的cgi-src文件夹

ROOT=../ 
CURDIR=$(shell /bin/pwd) 

include $(ROOT)/Makefile.basic 

#set root directory 
SUB_DIRS = util 
SUB_DIRS += cgi_util 
SUB_DIRS += cgi_module 

#Must be last 
SUB_DIRS += cgi_main 

all: 
ifneq ($(SUB_DIRS),) 
     @for i in $(SUB_DIRS) ; do if [ ! -d $(CURDIR)/$${i} ]; then continue; fi; \ 
     cd $(CURDIR)/$${i}; make || exit; cd $(CURDIR); done 
endif 

clean: 
ifneq ($(SUB_DIRS),) 
     @for i in $(SUB_DIRS) ; do if [ ! -d $(CURDIR)/$${i} ]; then continue; fi; \ 
     cd $(CURDIR)/$${i}; make clean || exit; cd $(CURDIR); done 
endif 


install: 

ifneq ($(SUB_DIRS),) 
     @for i in $(SUB_DIRS) ; do if [ ! -d $(CURDIR)/$${i} ]; then continue; fi; \ 
     cd $(CURDIR)/$${i}; make install || exit; cd $(CURDIR); done 
endif 

这里是我的Makefile.basic

CC=/usr/bin/gcc 
#CC=powerpc-linux-gcc 
CP=/usr/bin/cp 
CFLAGS=-g -Wall $(shell mysql_config --cflags) $(shell mysql_config --libs) 

www=/var/www 
htdocs=/htdocs 
cgi_bin=/cgi-bin 
config=/etc/apache2/sites-available/default 


INSTALL_DIR=$(pwd)/.install 

最新:在cgi_module

的Makefile

#set common variant 
.SUFFIXES: .c .h .o 

ROOT=../../ 
include $(ROOT)/Makefile.basic 

#LINK_NAME = changepass.cgi login.cgi network.cgi reboot.cgi shutdown.cgi 
LINK_NAME = login.cgi 

INCS = -I../include 
INCS += -I../../cgi_src/util/include 
OBJES=../../lib/ 


TARGET = libcgi_module.a 
#don't change below 
LIB_OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) 
CLEAN_OBJS = $(LIB_OBJS) $(TARGET) 

INST_OBJ = $(TARGET) 
%.o: %.c 
     $(CC) -c $(CFLAGS) $(INCS) -o [email protected] $< 

all: $(TARGET) 

$(TARGET): $(LIB_OBJS) 
     $(AR) -vsur [email protected] $^ 
     @cp $(TARGET) $(OBJES) 

clean: 
     [email protected] -rf $(CLEAN_OBJS) 

install: 
+0

你可以发布位于cgi_module(与gcc调用)的makefile吗? – 2011-05-31 07:52:15

+0

我发布最新更新,谢谢! – kevin 2011-05-31 09:27:42

回答

1

试试这个

CC=/usr/bin/gcc 
#CC=powerpc-linux-gcc 
CP=/usr/bin/cp 
CFLAGS = -g -Wall $(shell mysql_config --cflags) $(shell mysql_config --libs) 


foo: 
    @echo "CFLAGS are $(CFLAGS)" 

并启动make foo

+0

@cedric >>对不起,我迟到的回复。我仍然有错误。无论如何要克服这个问题?非常感谢 !!! – kevin 2011-05-30 01:57:08

+0

@kevin:尝试在生成文件显示CFL​​AGS值 'FOO创建一个foo的目标: @echo “CFLAGS是$(CFLAGS)”' 和发射'让foo' – 2011-05-30 07:51:51

+0

@cedric >>什么是富?对不起我的无知,我刚刚在2.5个月前开始使用C语言。你能详细说明一下吗?谢谢 !!! – kevin 2011-05-30 08:03:44