我使用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]
gcc -Wall -g main.c -pthread -o a.out
仍能正常运行吗?gcc -Wall -g main.c -lpthread -o a.out
的情况下修复警告? a.out
是另一种产生pthread的方法吗?答案 0 :(得分:6)
pthread_yield()
是一个非标准函数,通常通过定义
#define _GNU_SOURCE
虽然您应该使用-pthread
进行编译,但我希望您通过两个编辑获得相同的警告(除非-pthread
定义_GNU_SOURCE
可能是案件)。
正确的修复方法是不使用非标准函数pthread_yield()
并使用POSIX函数sched_yield()
代替#include <sched.h>
。
答案 1 :(得分:5)
你应该使用-pthread
进行编译和链接。它不仅链接库,还设置预处理器定义,有时选择不同的运行时库(例如在Windows上)。