We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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,
Look at uVision's "Linker" tab - are there any unusual settings there...?
I haven't changed anything from the default. I've got "Use Memory Layout from Target Dialog" and "Report 'might fail' Conditions as Errors" checked. I've got nothing under Misc control. Nothing looks odd in the linker control string either.
You tell us that when STL is referred to in your program, it "end up somewhere in assembly land". Where?
The call stack looks like (they're actually all memory addresses, so I just scrolled up to see which functions seemed to be called): 0: _sys_open: 1: freopen: 2: fopoen: 3: __rt_lib_init: 4: __rt_entry: 5: _ZSt9terminatev:
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?
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.