练习多线程时碰到的一个编译报错问题
先上一段多线程的代码,文件名A12_4.cpp
vector<string> ptr;
void *thread(void *vargp) {
long myid = (long)vargp;
static int cnt = 0;
cout << '[' << myid << "]: " << ptr[myid] << " (cnt = " << ++cnt << ")" << endl;
return nullptr;
}
int main(int argc, char *argv[]) {
long i;
pthread_t tid;
vector<string> msgs = {
"hello from foo",
"hello from bar"
};
ptr = msgs;
for (i = 0; i < 2; ++i) {
pthread_create(&tid, nullptr, thread, (void*)i);
}
pthread_exit(nullptr);
}
在命令行输入g++ A12_4.cpp -o ss时报错undefined reference to `pthread_create’
查阅资料后得到答案: For Linux the correct command is:
gcc -pthread -o term term.c
In general, libraries should follow sources and objects on command line, and -lpthread is not an “option”, it’s a library specification. On a system with only libpthread.a installed,
c++中只需要把gcc改称g++即可
g++ -pthread -o term A12_4.cpp
参考网页:Undefined reference to pthread_create in Linux
|