C++ C++;:&书信电报;sys/sysctl.h>;未能声明函数CTL_HW和HW_NCPU
大家好 我正在使用以下脚本(我没有编写)。这是我一直在努力修改的许多文件之一,以便在Linux上启动构建/制作 我在网上找到的所有信息都表明sys/sysctl.h应该正确声明以下函数: CTL_HW和HW_NCPU 但是,运行以下程序(称为“machineInfo.cpp”): 代码本身有问题吗?还是需要包含另一个标题?我已经用这个做了实验,在谷歌上搜索了几个小时,结果一无所获 非常感谢,C++ C++;:&书信电报;sys/sysctl.h>;未能声明函数CTL_HW和HW_NCPU,c++,header-files,C++,Header Files,大家好 我正在使用以下脚本(我没有编写)。这是我一直在努力修改的许多文件之一,以便在Linux上启动构建/制作 我在网上找到的所有信息都表明sys/sysctl.h应该正确声明以下函数: CTL_HW和HW_NCPU 但是,运行以下程序(称为“machineInfo.cpp”): 代码本身有问题吗?还是需要包含另一个标题?我已经用这个做了实验,在谷歌上搜索了几个小时,结果一无所获 非常感谢, 肖恩我认为问题在于。据我所知,这些常数是 我很高兴被证明是错的,因为我正在试图了解是否可以在Linux上
肖恩我认为问题在于。据我所知,这些常数是
我很高兴被证明是错的,因为我正在试图了解是否可以在Linux上工作。请在这里发布命令的输出
echo | g++-dM-E-| grep Linux
不响应澄清请求是赢得否决票的好方法。我使用了Docker和Ubuntu 18.04,包括请求的输出。@JasonR.Coombs这是在我冒险去实地考察之前,我完全忘记了这篇文章。我的错。我无法明确地解决这个问题,但结果证明这是白费力气,因为制作/安装感兴趣的程序所需做的只是调用编译器(编译器已经安装在我工作的计算集群上)。
#include "machineInfo.h"
#include <sys/sysctl.h>
#include <linux/sysctl.h>
#include <cstdio>
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
int StMachineInfo::numProcs(void) {
int numCPU = 0;
int nprocs;
size_t len = sizeof(nprocs);
static int mib[2] = { CTL_HW, HW_NCPU };
/* get the number of CPUs from the system */
sysctl(mib, 2, &numCPU, &len, NULL, 0);
if( numCPU < 1 )
{
mib[1] = HW_NCPU;
if (sysctl (mib, ARRAY_SIZE(mib), &nprocs, &len, NULL, 0) == 0 && len == sizeof (nprocs) && 0 < nprocs)
numCPU = nprocs;
if( numCPU < 1 )
numCPU = 1;
}
return numCPU;
}
g++ -c machineInfo.cpp
machineInfo.cpp: In function ‘int StMachineInfo::numProcs()’:
machineInfo.cpp:14:24: error: ‘CTL_HW’ was not declared in this scope
static int mib[2] = { CTL_HW, HW_NCPU };
^
machineInfo.cpp:14:32: error: ‘HW_NCPU’ was not declared in this scope
static int mib[2] = { CTL_HW, HW_NCPU };
^
Makefile:33: recipe for target 'machineinfo.o' failed
make: *** [machineinfo.o] Error 1