This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

http_cgi.c include problem

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

Parents Reply Children
  • 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,

    Akshat

  • 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!