Sign in

username:

password:



Not a member?

Search lpc2000



Search tips

Subscribe to lpc2000



lpc2000 by Keywords

2106 | ADC | ARM7 | Atmel | Bootloader | CAN | CrossStudio | CrossWorks | DDS | ECos | Ethernet | ETM | FIFO | FLASH | FPGA | GCC | GDB | GNU | GNUARM | GPIO | I2C | IAP | IAR | JTAG | Kickstart | LCD | Linux | LPC | LPC-E2294 | LPC2000 | LPC2100 | LPC2104 | Lpc2106 | Lpc210x | LPC2114 | LPC2119 | LPC2124 | LPC2129 | Lpc2138 | LPC213x | LPC21xx | LPC2210 | LPC2212 | LPC2214 | LPC2292 | LPC2294 | LPC2xxx | LPC3128 | MCB2100 | Olimex | Philips | PWM | Rowley | RTC | RTOS | SPI | SSP | UART | UART0 | UART1 | ULINK | USB | Watchdog | Wiggler


Ads

Discussion Groups

See Also

DSPFPGAElectronics

Discussion Groups | LPC2000 | Using C++ on LPC3128

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 )