Page 1 of 1

some issue with c++

Posted: Mon Sep 18, 2006 5:46 am
by amirsadig
In my current master thesis, I should implement a real time OS (using ucos-ii) with powerpc mpc5200. it also required to add c++ support.
my OS has newlib (libc) and with it I have a full standard c with all input/output functionality.
now when i compile this example with my OS:

Code: Select all

#include <iostream>

using namespace std;

class test {
        public:
        test() {printf("hallo amir 1\n"); };
        ~test() {};
        void printhallow(void);       
};

void test::printhallow(void)
{
    printf("hallo amir 2\n");      
    //cout << " here 23 \n"; 
}

extern "C" void testCPP(void)
{
        test *t = new test();       
        t->printhallow();
}
this example work fine, but when I uncomment //cout .. part
I got undhandled expection (not c++ exception, it is like interrupt)

should I initialise something before call that code?

Re:some issue with c++

Posted: Mon Sep 18, 2006 5:50 am
by amirsadig
just to mention.
I use GCC 4.1.1 and latest newlib and libstdc++-v3

Re:some issue with c++

Posted: Mon Sep 18, 2006 6:03 am
by bluecode
Just a thought: cout is most likely a global/static object, which needs to be initialized. I suspect you don't call the constructors of global/static objects on application startup, do you?
Look into th faq if you don't...

But you know, that you have to port a standard c++ library in order to use it? You can't just link your app with the standard C++ library of linux and then execute it under your os.

Re:some issue with c++

Posted: Mon Sep 18, 2006 6:11 am
by amirsadig
surely I have a cross compile stdc++ library.

yes I don't call any of global/static objects, because I don't what they are and where they are located ;D

I will read a bout them and on how i can i call them

Re:some issue with c++

Posted: Mon Sep 18, 2006 6:15 am
by bluecode
ok, if yu want to check whether there are static/gobal objects or not, then you can just look at the size of the ctors section in your executable (given that you don't discard that section).

Re:some issue with c++

Posted: Mon Sep 18, 2006 7:32 am
by amirsadig
thank for your quick help!!
I call now the global/static objects.
now I don't get any exception. that is good.
but no output come.
note that printf() work but "cout << ..." not !

Re:some issue with c++

Posted: Mon Sep 18, 2006 8:53 am
by bluecode
hm,

ok, I looked a little bit into the gnu stdlibc++ source and came up with the following:
in src/ios_init.cpp there is a class constructor called ios_base::Init::Init(), which seems to initialize the cout/cin/* objects. You should check whether this constructor (I'm not yet sure if it is a constructor and if it is belonging to a global/static object) is really called (some printf'ing is sufficient).
Another thing: Did you also implement the placement new (again, look into the faq)? Because this is used quite much by this constructor.

Re:some issue with c++

Posted: Mon Sep 18, 2006 9:32 am
by amirsadig
ios_base::Init::Init()
is got called from one of the global objects.

I don't have my own implementation I use the one with stdlc++, which call at end my malloc and free functions.

I found that my libc ist fully initialized before I call "cout", so stdout is not valid.

now it work fine.

thank you alot for your help