A: 

Just a diagnostic question: What happens if you don't detach the thread in Start()? You'd have to pthread_join() the threads back in main().

Also, have you considered Boost's threads? That might be more appropriate since you're using C++ rather than C.

chrisaycock
Unfortunately, I tried it with joinable threads and it makes no difference.
Laurens
A: 

I once encountered a problem like this which was caused by linking with a version of libstdc++ with no threading support, meaning that all threads shared a common exception handling stack with disastrous consequences.

Make sure the cross-compiler and its libraries were configured with --enable-threads=posix.

Mike Seymour
This piece of code is compiled without <code>libstdc++</code>. It shouldn't use any of the STL routines (as far as I know).
Laurens
@Laurens: It will be included implicitly when linking with `g++`; it's needed for various bits of language support, including exception handling, as well as the Standard Library.
Mike Seymour