We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello everyone,
I want to create a dynamic page.
When i try to include http_cgi.c in my project i get the following errors:
1. http.axf: Error: L6200E: Symbol cgi_process_var multiply defined (by at_http_cgi.o and http_cgi.o).
2. http.axf: Error: L6200E: Symbol cgi_func multiply defined (by at_http_cgi.o and http_cgi.o).
What am i doing wrong?
thanks and regards
Akshat
contact Keil support.
Are the *.o file linked before the library?
If the library is linked before any *.o file, then the library will "fill" any missing symbols, and then the linker is forced to include the *.o file and gets collisions.
Westermark,
That was a possible solution i too thought of(to link the http_cgi.c before the RTLTCP.lib), but i've no idea how to go about doing it in uVision.
Please guide me for the same.
Thanks and regards,
that is easy if you build your code outside uv3. use a make file - here is an example, just change the source files names:
CC = armcc LNK = armlink ASM = armasm # define the C object files # # This uses Suffix Replacement within a macro: # $(name:string1=string2) # For each word in 'name' replace 'string1' with 'string2' # Below we are replacing the suffix .c of all words in the macro SRCS # with the .o suffix # PROJ = scheduler SRCS = 91x_gpio.c 91x_it.c 91x_scu.c 91x_tim.c 91x_uart.c 91x_vic.c 91x_wdg.c config.c hardware.c LED.c main.c priority_queue.c queue.c Retarget.c scheduler.c Serial.c swi_functions.c synchronization.c system_notifications.c system_services.c timer.c trace_buffer.c OBJS = $(SRCS:.c=.o) SWI.o STR91x.o DEBUG = -g CFLAGS = --device DARMST9 --feedback ".\bin\scheduler.fed" -Otime -O2 -c $(DEBUG) --apcs=interwork -DLIBRARY_IO_SUPPORT -DTRACE_BUFFER_MODULE -DTIMER_MODULE -DSEMAPHORE_MODULE LFLAGS = --device DARMST9 --feedback ".\bin\scheduler.fed" --strict --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers ASMFLAGS = --device DARMST9 $(DEBUG) --apcs=interwork --xref TOOLCHAIN_INC_PATH = D:/Keil/ARM/INC/ST/91x ARMLIB_PATH = D:/Keil/ARM/RV31/LIB # define any directories containing header files # INCLUDES1 = D:/Keil/ARM/INC/ST/91x INCLUDES2 = D:/Keil/ARM/RV31/INC STR91x.o: $(ASM) $(ASMFLAGS) -o ./bin/$@ STR91x.s SWI.o: $(ASM) $(ASMFLAGS) -o ./bin/$@ SWI.s .c.o: $(CC) $(CFLAGS) -I "$(TOOLCHAIN_INC_PATH)" -I "$(INCLUDES2)" -o ./bin/$@ $< all: $(OBJS) $(LNK) --libpath "$(ARMLIB_PATH)" $(LFLAGS) --list "./lst/$(PROJ).map" --userlibpath="./bin" $(OBJS) --output ./bin/$(PROJ).axf clean: del /Q .\bin\*.* del /Q .\lst\*.* depend: $(SRCS) makedepend -I"$(INCLUDES1)" -I"$(INCLUDES2)" $^ # DO NOT DELETE THIS LINE -- make depend needs it
Yes I know it is a little messy, the associated project is still a prototype (but not for long...). you would need to change the paths as well, and the tool chain path and .exe names, if you don't use RealView.
@ Tamir, thanks for the valuable input, but i really don't have time in hand to try that out, plus it's not too much in my domain to understand the make file, i'm essentially a h/w guy :).
it really is not hard. all you need is 'make.exe' (the win32 variant for the famous unix make). but to quickly move on all you need to do is run your linker manually - see uv3 linker command window on the linker tab to see the options that are used, and additional references in the documentation of you need. you RV linker is probably located at "...\Keil\ARM\BIN31". hopefully the order of linking is as you specify it in the command line!