为什么使用-pthread使用-lpthread隐式声明pthread_yield?

时间:2015-08-24 05:15:16

标签: c linux gcc pthreads

我使用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);
}

第一次编译:{{1​​}}
一切都好。

第二次编译:{{1​​}}
给出

  

警告:隐式声明函数'pthread_yield'[-Wimplicit-function-declaration]

  1. 第二个gcc -Wall -g main.c -pthread -o a.out仍能正常运行吗?
  2. 如何在没有gcc -Wall -g main.c -lpthread -o a.out的情况下修复警告? a.out是另一种产生pthread的方法吗?

2 个答案:

答案 0 :(得分:6)

pthread_yield()是一个非标准函数,通常通过定义

来启用
#define _GNU_SOURCE

虽然您应该使用-pthread进行编译,但我希望您通过两个编辑获得相同的警告(除非-pthread定义_GNU_SOURCE可能是案件)。

正确的修复方法是使用非标准函数pthread_yield()并使用POSIX函数sched_yield()代替#include <sched.h>

答案 1 :(得分:5)

应该使用-pthread进行编译和链接。它不仅链接库,还设置预处理器定义,有时选择不同的运行时库(例如在Windows上)。