Привет, я разрабатываю CGI, который написан на C и пытаюсь использовать Mysql
Когда я пытаюсь использовать его, я получаю те неопределенные ошибки ссылок для символов, которые начинаются с 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
Последнее обновление:
Makefile в cgi_module
#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 $@ $<
all: $(TARGET)
$(TARGET): $(LIB_OBJS)
$(AR) -vsur $@ $^
@cp $(TARGET) $(OBJES)
clean:
-@rm -rf $(CLEAN_OBJS)
install: