2016-04-22 106 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