gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

C/C++ > Compiling mutli-sources cpp problem

#10315 - dieudunet - Tue Sep 02, 2003 10:48 am

Hi,

i'm doing a GBA demo and i use 3 cpp sources files
i compile each one with ARM sdt without problem but while linking using ARMlink i got an error that say :
Error: Global COS multiply defined (in loader.o and main.o).
Error: Global angle multiply defined (in loader.o and main.o).
Error: Global zoom multiply defined (in loader.o and main.o).
Error: Global global_frame_count multiply defined (in loader.o and main.o).
Error: Global blend multiply defined (in loader.o and main.o).
Error: Global SetMode multiply defined (in loader.o and initbg.o).
Error: Global compteur multiply defined (in loader.o and main.o).
Error: Global OAM multiply defined (in loader.o and main.o).
Error: Global rotData multiply defined (in loader.o and main.o).
Error: Global sprites multiply defined (in loader.o and main.o).
Error: Global back multiply defined (in loader.o and initbg.o).
Error: Global key multiply defined (in loader.o and main.o).
Error: Global SIND multiply defined (in loader.o and main.o).
Error: Global COSD multiply defined (in loader.o and main.o).
Error: Global bg2 multiply defined (in loader.o and initbg.o).
Error: Global bg1 multiply defined (in loader.o and initbg.o).
Error: Global bg0 multiply defined (in loader.o and initbg.o).
Error: Global bg3 multiply defined (in loader.o and initbg.o).
Error: Global scr multiply defined (in loader.o and initbg.o).
Error: Global SaveOAMsprites multiply defined (in loader.o and main.o).
Error: Global sorciere multiply defined (in loader.o and main.o).
Error: Global etoile multiply defined (in loader.o and main.o).
Error: Global invoc2con multiply defined (in loader.o and main.o).
Error: Global invoc2tir multiply defined (in loader.o and main.o).
Warning: Attribute conflict within AREA C$$code
(conflict first found with music.o(C$$code)).
(attribute difference = {READONLY}).
Errors in link, no output generated.
ARM Linker: finished, 2 informational, 2 warning and 229 error messages.

The problem is that my 3 sources files use the same header : gba.h so they define the same variables 3 times....

Is it possible to configure armlink to forget this or i have to configure my code to use different header for each code ....

thanks

#10332 - sajiimori - Tue Sep 02, 2003 6:37 pm

Declare the data "extern" in the header, then do the actual definition in gba.cpp and link it in.