C ++:не может объявить функции CTL_HW и HW_NCPU - PullRequest
0 голосов
/ 26 мая 2018

Алоха все!

Я работаю со следующим скриптом (который я не писал).Это один из многих файлов, над которыми я работал, чтобы начать сборку / сборку в Linux.

Все, что я нашел в Интернете, говорит о том, что sys / sysctl.h должен должным образом объявитьэти функции:

CTL_HW и HW_NCPU

Однако, работает следующее (называемое "machineInfo.cpp"):

#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

Что-то не так с самим кодом?Или мне нужно #include другой заголовок?Я экспериментировал с этим и гуглил пару часов, но безрезультатно.

Большое спасибо,

Шон

1 Ответ

0 голосов
/ 08 марта 2019

Я считаю, что проблема в том, что sysctl не имеет оболочки glibc в Linux .Насколько я понимаю, эти константы доступны только на BSD .

Я был бы рад оказаться ошибочным, поскольку я пытаюсь понять, если это uname -pПоведение может работать в Linux.

...