Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
19 years ago

c++ version of twothreads example

Hi Forum,

I have been developing applications using eCos and the NiosII IDE for a while now, and wish to develop in c++. I started with the twothreads example and had it up and running in no time. I simply changed the file name from twothreads.c to twothreads.cxx to see what would happen. It compiled OK, but would not run properly. The line of execution appeared to get stuck before the threads got a chance to run (or something).

Is there something fundamental that I am missing here?

Do I have to indicate the c functions using some construction like:

extern "c" { void function_name(void);}

Or is there a more basic problem?

Thanks in advance for any help provided.

peter

2 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi Peter,

    Try adding the word "externC" before the cyg_user_start function in twothreads.cxx, like this:

    /* we install our own startup routine which sets up threads */
    externC void cyg_user_start(void)
    {
      diag_printf(" Entering\n");
      ...
      ...
    }

    This should help the linker recognise that you have provided a copy of cyg_user_start, otherwise it will link in the default version. I think externC stops the C++ name-mangler from changing the function name into one that won't link with the code that expects cyg_user_start to be in a module written in C.

    Mike