4.6pre1 Makefile link libraries

Joel Sherrill joel.sherrill at OARcorp.com
Fri Mar 7 16:15:44 UTC 2003



Wendell Thompson wrote:
> 
> FYI to anyone interested in these issues, see notes below:

Please file a PR with a patch if you have one.  Then it will be in the
queue. :)

> Wendell Thompson wrote:
> > Ralf Corsepius wrote:
> >
> >> Am Die, 2003-03-04 um 23.08 schrieb Wendell Thompson:
> >>
> >>> gregory.menke at gsfc.nasa.gov wrote:
> >>>
> >>>> Wendell Thompson writes:
> >>>> > For a C++ application with 4.6.0pre1, which link libraries need to
> >>>> be > listed in the Makefile?
> >>>> > > The linker is complaining about even the C++ basics- operator
> >>>> new, > operator delete, etc. Amongst other things.
> >>>> >
> >>>
> >>>
> >>
> >> This indicates one of these
> >>
> >> * not using <target>-rtems-g++ to link.
> >> * not using make-cxx-exe to build the download-images
> >> * not having a make-cxx-exe in your <bsp>.cfg
> >>
> >
> 
> To use <target>-rtems-g++ to link, the rule for make-cxx-exe needs to
> use $(LINK.cc) and include $(AM_CXXFLAGS) as below in <bsp>.cfg:
> 
> define make-cxx-exe
>          $(LINK.cc) $(AM_CFLAGS) $(AM_CXXFLAGS) $(AM_LDFLAGS) \
>              -o $(basename $@).exe \
>              -Xlinker -Map -Xlinker mapfile $(LINK_OBJS) $(LINK_LIBS)
> endef
> 
> The $(PGM) target in the application Makefile needs to call
> $(make-cxx-exe) instead of $(make-exe):
> 
> $(PGM): $(OBJS) $(LINK_FILES)
>          $(make-cxx-exe)
> 
> ?? Does anyone know where $(LINK.cc) is documented? I can't find it in
> the info page for make.
> 
> >
> > On to the next problem. The linker insists on including dummy.o from
> > librtemscpu.a, even though the Init function is defined in the app files
> > (in init5206.c):
> >
> > m68k-rtems-g++ -B/opt/rtems/m68k-rtems/clc5206_am/lib/ -specs bsp_specs
> > -qrtems   -g -Wall  -O4 -fomit-frame-pointer -g   -gstabs+   -m5200
> > -DREV_B -DNUM_TL1_PORTS=3         -o o-optimize/rtems_demo.exe -Xlinker
> > -Map -Xlinker mapfile  o-optimize/console.o o-optimize/init5206.o
> > o-optimize/Sys_Task.o o-optimize/Leds.o o-optimize/Dig_Io.o
> > o-optimize/Alarms.o o-optimize/Timer.o o-optimize/Ext_Ctrls.o
> > o-optimize/Bit_Map.o o-optimize/Switches.o o-optimize/Lib.o
> > o-optimize/Tl1_Port.o o-optimize/Port_Task.o o-optimize/Sio.o
> > o-optimize/Buffer.o o-optimize/Modem.o o-optimize/Lists.o
> > o-optimize/Message.o o-optimize/Am416Rtc.o o-optimize/SioRCF.o
> > o-optimize/ds1302.o o-optimize/Globals.o o-optimize/NVRam.o
> > o-optimize/tc58f400.o o-optimize/RTEMSTimer.o o-optimize/ModemMx614.o
> > o-optimize/HalfDup_Tl1.o o-optimize/init.o
> > /opt/rtems/m68k-rtems/clc5206_am/lib/no-dpmem.rel
> > /opt/rtems/m68k-rtems/clc5206_am/lib/no-mp.rel
> > /opt/rtems/m68k-rtems/clc5206_am/lib/no-part.rel
> > /opt/rtems/m68k-rtems/clc5206_am/lib/librtems++.a
> > /opt/rtems/m68k-rtems/clc5206_am/lib/librtemscpu.a(dummy.o): In function
> > `Init':
> > itimerspec/../../../../../../../cpukit/libmisc/dummy/dummy.c:150:
> > multiple definition of `Init'
> > o-optimize/init.o:/usr/local/projects/cf_am416_revb_rtems-4.6pre1/init.cpp:44:
> > first defined here
> > /opt/rtems/lib/gcc-lib/m68k-rtems/3.2.1/../../../../m68k-rtems/bin/ld:
> > Warning: size of symbol `Init' changed from 2942 to 2 in
> > /opt/rtems/m68k-rtems/clc5206_am/lib/librtemscpu.a(dummy.o)
> > /opt/rtems/m68k-rtems/clc5206_am/lib/librtemscpu.a(dummy.o)(.data+0x2c):
> > undefined reference to `main'
> > collect2: ld returned 1 exit status
> >
> >
> 
> This and other mysterious linker errors disappeared with the addition of
> "CONFIGURE_INIT" to the start of the application configuration table.
> 
> Configure carefully!

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel at OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985



More information about the users mailing list