Linux平台gnu C undefined reference to `CPU_ZERO‘
·
故障源码
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <sched.h>
#include <errno.h>
int main(int argc, char *argv[])
{
if (argc != 4)
{
printf("usage: fastChangeCore pid startCoreId endCoreId\n");
return 1;
}
cpu_set_t mask;
int pid = atoi(argv[1]);
int startCoreId = atoi(argv[2]);
int endCoreId = atoi(argv[3]);
int coreId = startCoreId;
while (1)
{
CPU_ZERO(&mask);
CPU_SET(coreId, &mask);
// 进程迁移到CPU i
if (sched_setaffinity(pid, sizeof(mask), &mask) == -1)
{
printf("绑定CPU出错, ERROR:%s\n", strerror(errno));
return -1;
}
coreId++;
if (coreId > endCoreId)
{
coreId = startCoreId;
}
}
return 0;
}
编译指令及故障输出

yeqiang@yeqiang-PC:~/code/cproj/openssl-training$ gcc fastChangeCore.c
fastChangeCore.c: In function ‘main’:
fastChangeCore.c:26:9: warning: implicit declaration of function ‘CPU_ZERO’; did you mean ‘FD_ZERO’? [-Wimplicit-function-declaration]
CPU_ZERO(&mask);
^~~~~~~~
FD_ZERO
fastChangeCore.c:27:9: warning: implicit declaration of function ‘CPU_SET’; did you mean ‘FD_SET’? [-Wimplicit-function-declaration]
CPU_SET(coreId, &mask);
^~~~~~~
FD_SET
fastChangeCore.c:29:13: warning: implicit declaration of function ‘sched_setaffinity’; did you mean ‘sched_setparam’? [-Wimplicit-function-declaration]
if (sched_setaffinity(pid, sizeof(mask), &mask) == -1)
^~~~~~~~~~~~~~~~~
sched_setparam
/usr/bin/ld: /tmp/cckoBBT3.o: in function `main':
fastChangeCore.c:(.text+0x96): undefined reference to `CPU_ZERO'
/usr/bin/ld: fastChangeCore.c:(.text+0xaf): undefined reference to `CPU_SET'
collect2: error: ld returned 1 exit status
解决方案:文件头部添加宏定义 #define _GNU_SOURCE
完整源码如下
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <sched.h>
#include <errno.h>
int main(int argc, char *argv[])
{
if (argc != 4)
{
printf("usage: fastChangeCore pid startCoreId endCoreId\n");
return 1;
}
cpu_set_t mask;
int pid = atoi(argv[1]);
int startCoreId = atoi(argv[2]);
int endCoreId = atoi(argv[3]);
int coreId = startCoreId;
while (1)
{
CPU_ZERO(&mask);
CPU_SET(coreId, &mask);
// 进程迁移到CPU i
if (sched_setaffinity(pid, sizeof(mask), &mask) == -1)
{
printf("绑定CPU出错, ERROR:%s\n", strerror(errno));
return -1;
}
coreId++;
if (coreId > endCoreId)
{
coreId = startCoreId;
}
}
return 0;
}
编译效果
yeqiang@yeqiang-PC:~/code/cproj/openssl-training$ gcc fastChangeCore.c
yeqiang@yeqiang-PC:~/code/cproj/openssl-training$ ll a.out
-rwxr-xr-x 1 yeqiang yeqiang 16704 2022-12-12 10:40:39 a.out
更多推荐



所有评论(0)