Ответ 1
Вы можете попробовать использовать параметр -pthread для g++.
-pthread
Adds support for multithreading with the pthreads library. This
option sets flags for both the preprocessor and linker.
Я использую pthread.h
в файле *.cc
. когда я пытаюсь использовать pthread_exit(0);
или pthread_join(mythrds[yy],NULL);
, он говорит:
.cc:(.text+0x3e): undefined reference to `pthread_exit'
при выполнении очень похожего кода в файле *.c
с gcc он отлично работает. Как я могу использовать pthread в С++.. (Я также добавил -lpthread)
..
void *myThreads ( void *ptr )
{
...
pthread_exit(0);
}
..
флаги:
g++ -lpthread -Wall -static -W -O9 -funroll-all-loops -finline -ffast-math
Вы можете попробовать использовать параметр -pthread для g++.
-pthread
Adds support for multithreading with the pthreads library. This
option sets flags for both the preprocessor and linker.
У ваших файлов заголовков pthread есть extern "C" { ... }
вокруг прототипов функций? Это обычный случай, когда компоновщик не может ссылаться на С++.
Это происходит потому, что С++ обычно обрабатывает имя, чтобы он мог кодировать детали параметров в символы (допускающие полиморфизм). Например, функции:
void x(int);
void x(void);
void x(char,int,float,double);
все получают разные символы компоновщика.
Если файлы заголовков не имеют extern "C" { ... }
, вам может потребоваться сделать это самостоятельно:
extern "C" {
#include <pthread.h>
}
Надеюсь, что это сработает.