Discussion group dedicated to the Philips LPC2000 family of ARM MCUs
Using C++ on LPC3128 - soren_t_hansen - Apr 20 4:00:00 2005
I'm trying to use C++ to write a program to a LPC2138, and so far it
was working ok. But when trying to make a virtual function the linker
reports the following error:
/src/Blinky.o(.gnu.linkonce.r._ZTI11CLEDControl+0x0): undefined
reference to `vtable for __cxxabiv1::__class_type_info'
/src/Blinky.o(.gnu.linkonce.r._ZTI7CBlinky+0x0): undefined reference
to `vtable for __cxxabiv1::__si_class_type_info'
I'm using the GNU ARM (3.4.3) toolchain to compile the program and for
the linker I use the following:
-T $(LD_SCRIPT_RAM) \
-Wl,-Map=".\bin\Ram\Blinky.map",-Ttext=0x40000000,-Tdata=0x40003000 \
--gc-sections -o .\RAM\Blinky.elf \
-nostartfiles -nodefaultlibs
I've tried to use the -lstdc++ option, but that resulted in another
error, regarding delete(void*)
Is it because you can't use virtual functions on ARM7 or is it an
error in the compiler or maybe my linker script?
Best Regards
Søren Hansen

(You need to be a member of lpc2000 -- send a blank email to lpc2000-subscribe@yahoogroups.com )
Re: Using C++ on LPC3128 - Jaromir - Apr 21 2:04:00 2005
Add compiler flag : -fno-rtti to disable runtime type information, and in linker script
add subsection
*(.gnu.linkonce*) which is required in C++.
But when you use some global obiects ( as global variables ), you should also add
subsection
*(SORT(.ctors)) and modify startup file to call all constructors ( before calling main()
function).
Jaromir
_________________________________________________________________
List sprawdzony skanerem poczty mks_vir ( http://www.mks.com.pl )
[Non-text portions of this message have been removed]
______________________________
Stellaris® MCU Family: New Parts, New Package, New Price.
(You need to be a member of lpc2000 -- send a blank email to lpc2000-subscribe@yahoogroups.com )
Re: Using C++ on LPC3128 - 42Bastian Schick - Apr 21 3:36:00 2005
Søren
> I've tried to use the -lstdc++ option, but that resulted in another
> error, regarding delete(void*)
Do you use for all stages esp. link g++ ?
> Is it because you can't use virtual functions on ARM7 or is it an
It has for sure nothing to do with the CPU.
> error in the compiler or maybe my linker script?
Most likely a tool-misuse or linker script. Less likely wrong configured
gcc.
Very unlikely a error in the compiler.
--
42Bastian Schick

(You need to be a member of lpc2000 -- send a blank email to lpc2000-subscribe@yahoogroups.com )
Re: Using C++ on LPC3128 - Charles Manning - Apr 21 18:32:00 2005
Ok, you're free to do what you want, but I feel I must make a comment.
C++ uses more resources (RAM and flash) than the same thing done in C code.
C++ tends to need far more dynamic memory allocation/freeing. Something that
is typically not very well handled on small embedded systems.
C++ hides detail making it harder to debug on an embedded platform.
In short, C++ and small embedded systems don't mix very well. In over 20
years of embedded programming I have never found a compelling need for C++ on
smaller systems.
There is nothing theoretical preventing the use of C++ on ARM7 though. It
will all be stuff to do with your compiler settings, linking, and making sure
you provide all the runtime stuff that C++ needs.
On Wednesday 20 April 2005 19:56, soren_t_hansen wrote:
> I'm trying to use C++ to write a program to a LPC2138, and so far it
> was working ok. But when trying to make a virtual function the linker
> reports the following error:
>
> /src/Blinky.o(.gnu.linkonce.r._ZTI11CLEDControl+0x0): undefined
> reference to `vtable for __cxxabiv1::__class_type_info'
> /src/Blinky.o(.gnu.linkonce.r._ZTI7CBlinky+0x0): undefined reference
> to `vtable for __cxxabiv1::__si_class_type_info'
>
> I'm using the GNU ARM (3.4.3) toolchain to compile the program and for
> the linker I use the following:
>
> -T $(LD_SCRIPT_RAM) \
> -Wl,-Map=".\bin\Ram\Blinky.map",-Ttext=0x40000000,-Tdata=0x40003000 \
> --gc-sections -o .\RAM\Blinky.elf \
> -nostartfiles -nodefaultlibs
>
> I've tried to use the -lstdc++ option, but that resulted in another
> error, regarding delete(void*)
>
> Is it because you can't use virtual functions on ARM7 or is it an
> error in the compiler or maybe my linker script?
>
> Best Regards
> Søren Hansen
>
> Yahoo! Groups Links
>

(You need to be a member of lpc2000 -- send a blank email to lpc2000-subscribe@yahoogroups.com )