[ECOS] Re: uSTL hello world
cetoni GmbH - Uwe Kindler
uwe.kindler@cetoni.de
Tue Sep 1 08:36:00 GMT 2009
Hi John,
> There seems to be a problem with the uSTL hello world example given in
> the uSTL documentation. The code produces no output. However, if I add a
> printf() call after the cout.flush(), then I see _both_ messages.
>
> This is not a case of printf() flushing the output - I can observe the
> output from cout on the diagnostics channel _before_ the call to
> printf() is made. In fact, if I move the printf() call to the start of
> main(), then everything still works.
I can confirm this on my target. For me it smells like a linker issue. I
wrote the following main function from the example an added a test
function with a printf call that is not called from main.
void test()
{
printf("Hello printf2!\n");
}
int main (int argc, char* argv[])
{
cout << "Hello world!\n";
cout.flush();
return EXIT_SUCCESS;
}
If I execute main then I can see the output of cout. If I remove the
test function with the printf reference then the main function does not
print anything. So adding a printf reference makes cout working - so I
think this is a linker issue.
The stream objects are declared in the file ofstream.cpp:
#ifdef CYGVAR_USTL_CIN_COUT_CERR
ifstream cin (STDIN_FILENO);
ofstream cout (STDOUT_FILENO);
ofstream cerr (STDERR_FILENO);
#endif
For the creation of these objects there is no constructor priority set -
could this be the problem? Maybe the stream objects are created prior to
the creation of the libc stream objects. In the uSTL code there is no
explicit printf reference. It only uses vsnprintf.
Uwe
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
More information about the Ecos-discuss
mailing list