我在 CentOS7 中使用 gcc 编译此代码 main.c:
#include <pthread.h>
void* mystart(void* arg)
{
pthread_yield();
return(0);
}
int main(void)
{
pthread_t pid;
pthread_create(&pid, 0, mystart, 0);
return(0);
}
第一次编译:gcc -Wall -g main.c -pthread -o a.out
一切都好。
第二次编译:gcc -Wall -g main.c -lpthread -o a.out
给予
warning: implicit declaration of function 'pthread_yield' [-Wimplicit-function-declaration]
- 第二个
a.out
还能正常运行吗? - 如何在没有
-pthread
的情况下修复警告?sched_yield
是生成 pthread 的另一种方法吗?
最佳答案
pthread_yield()
是一个非标准功能,通常通过定义
#define _GNU_SOURCE
虽然你应该使用-pthread
对于编译,我希望您在两个编译中得到相同的警告(除非-pthread
定义_GNU_SOURCE
,这可能是这种情况)。
正确的修复方法是不使用非标准函数pthread_yield()
并使用 POSIX 函数 sched_yield()
相反,包括 #include <sched.h>
.
关于c - 为什么使用 -lpthread 隐式声明 pthread_yield 而使用 -pthread 则一切正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39822375/