2016-04-22 70 views
3

我正在编写一个需要在单核上运行的程序。将其绑定到单核,我使用sched_setaffinity(),但是编译器会发出警告:隐式函数声明'sched_setaffinity'

implicit declaration of function ‘sched_setaffinity’

我的测试代码:

#include <stdio.h> 
#include <unistd.h> 
#define _GNU_SOURCE 
#include <sched.h> 

int main() 
{ 
    unsigned long cpuMask = 2; 
    sched_setaffinity(0, sizeof(cpuMask), &cpuMask); 
    printf("Hello world"); 
    //some other function calls 
} 

能否请你帮我想办法。实际上代码是编译和运行的,但我不确定它是在单核上运行还是在切换核心。

我使用Ubuntu 15.10和gcc 5.2.1版

+0

我使用Ubuntu 15.10和gcc 5.2.1版 – Aadarsh

回答

7

你需要移动#define _GNU_SOURCE到顶部。在man sched_setaffinity它说:

#define _GNU_SOURCE    /* See feature_test_macros(7) */ 

而在man 7 feature_test_macros它说:

注:为了有效,一个功能测试宏必须包括任何头文件之前定义 。这可以通过 编译命令(cc -DMACRO = value)完成,也可以通过在包含任何头文件之前在源代码中定义 之内的宏来完成。

因此,在这一天结束的时候你的代码应该是这样的:

#define _GNU_SOURCE 
#include <stdio.h> 
#include <unistd.h> 
#include <sched.h> 


int main() 
{ 
    unsigned long cpuMask = 2; 
    sched_setaffinity(0, sizeof(cpuMask), &cpuMask); 
    printf("Hello world"); 
    //some other function calls 
} 
+0

谢谢,它的工作 – Aadarsh