17

I am using pthread.h in a *.cc file. when I try to use pthread_exit(0); or pthread_join(mythrds[yy],NULL); it says:

.cc:(.text+0x3e): undefined reference to `pthread_exit'

when complied very similar code in a *.c file with gcc it work perfect. How Can I use pthread's in c++.. (I also added -lpthread)

..
void *myThreads ( void *ptr )
{
...
pthread_exit(0); 
}
..

flags:

g++ -lpthread -Wall -static -W -O9 -funroll-all-loops -finline -ffast-math
jww
  • 97,681
  • 90
  • 411
  • 885
ogzylz
  • 1,345
  • 2
  • 12
  • 13

2 Answers2

36

You might try using the -pthread option to g++.

   -pthread
       Adds support for multithreading with the pthreads library.  This
       option sets flags for both the preprocessor and linker.
WhirlWind
  • 13,974
  • 3
  • 42
  • 42
  • thnks a lot, it reaaaaaaaallly helped. I thought -lpthread was doing the same think but it isnt. – ogzylz Apr 21 '10 at 02:28
  • You can find out what -pthread does on your platform using 'gcc -dumpspecs' and looking for things that begin '%{pthread' – Flexo Oct 28 '10 at 16:06
  • The '-lpthread' option only includes the pthread library. That may not be sufficient on your platform to get pthreads support. – David Schwartz Sep 17 '11 at 07:13
2

Do your pthread header files have extern "C" { ... } around the function prototypes? That's the usual case for the linker not being able to link in C++.

It occurs because C++ generally does name-mangling so that it can encode parameter details into symbols (allowing polymorphism). For example, the functions:

void x(int);
void x(void);
void x(char,int,float,double);

all get different linker symbols.

If the header files don't have the extern "C" { ... }, you may need to do it yourself:

extern "C" {
    #include <pthread.h>
}

Hopefully that will work.

paxdiablo
  • 854,327
  • 234
  • 1,573
  • 1,953