我用gcc在CentOS7中编译了这段代码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
没事的

第2次编译:gcc -Wall -g main.c -lpthread -o a.out



  警告:函数'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/

10-16 04:50