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

ARM: Using STL vectors

Hi,

I'm writing a C++ program that will run on an STM3210E-EVAL board and I'm having some problems using STL vectors. I'm wondering what I'm doing wrong. (Or if STL vectors are even supported.)

Here's a snippet:

#include <vector>

.
.
.

void func()
{
  std::vector<int> temp;

  temp.push_back(5);
}

When I try to run the debugger on my target, I end up somewhere in assembly land and never reach the beginning of my main() function. (I am not familiar with assembly so, I'm not quite sure where I am or how I got there.)

When I run in simulator mode, everything works fine. (I end up at the beginning of my main() function like I expect.)

It appears that whenever I make any command that increases the size of my vector, I get the same result. If I never insert into my vector or resize it, then the debugger brings me to the beginning of main(), like I'd expect.

The last time I saw something like this was when my heap was 0 and I tried newing something on the heap. If anyone has any ideas, I'd be grateful.

I'm required to write my program in C++ and though I'm not required to use vectors, I really would like to. (I also have a few ideas of how to implement it differently if it turns out that vectors don't work.)

Thanks,

Parents
  • Have you (or somebody else - check in your project) re-implemented "__rt_lib_init()"? It seems that adding a C++ object to your project fails the initialization of the C runtime library. That's not supposed to happen!
    In addition, try this: compare the map file of a functioning program (no STL) to the one having a reference to STL. What do you see?

Reply
  • Have you (or somebody else - check in your project) re-implemented "__rt_lib_init()"? It seems that adding a C++ object to your project fails the initialization of the C runtime library. That's not supposed to happen!
    In addition, try this: compare the map file of a functioning program (no STL) to the one having a reference to STL. What do you see?

Children
  • Have you (or somebody else - check in your project) re-implemented "__rt_lib_init()"?

    No, no one has touched/rewritten __rt_lib_init.

    In addition, try this: compare the map file of a functioning program (no STL) to the one having a reference to STL. What do you see?

    The first thing I notice is that the non-working version is much larger (RO = 23020, RW = 17400) compared to the working version (R0 = 1516, RW = 17008).

    The second thing I notice, is that in the non-working version, it removed testvector.o from the image. (Testvector.cpp is the file that contains my main() function.)

    Both things don't look that great in my opinion...

  • The second thing I notice, is that in the non-working version, it removed testvector.o from the image.

    Correction, it removed more portions of testvector.o.