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

2 Answers 2

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.
Sign up to request clarification or add additional context in comments.

3 Comments

thnks a lot, it reaaaaaaaallly helped. I thought -lpthread was doing the same think but it isnt.
You can find out what -pthread does on your platform using 'gcc -dumpspecs' and looking for things that begin '%{pthread'
The '-lpthread' option only includes the pthread library. That may not be sufficient on your platform to get pthreads support.
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.

1 Comment

thnk but the problem was not that.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.