HZ变量未定义

时间:2009-12-26 02:36:00

标签: c++ header-files

我正在尝试编译某人的代码并且该人正在使用变量HZ(我认为它代表Hertz用于cpu的hertz)但编译器抱怨该变量未定义。我的猜测是该人没有包含正确的头文件。

所以有人知道哪个头文件,HZ定义在哪个?

由于

编辑:编译适用于Debian g ++版本4.3.2
我正在使用的设置--OSX Leopard 10.5.8,g ++版本4.0.1是它失败的地方。

4 个答案:

答案 0 :(得分:6)

在我的Linux机器上,它在/usr/include/asm/param.h:#define HZ 100

中定义

我无法在Mac OS X上找到任何定义。

答案 1 :(得分:6)

Paul's answer是正确的,但我会稍微扩展一下。

Linux有一个编译时选项,用于确定内核计时器的频率。大约是HZ定义的频率,内核调度程序将中断进程并开始其调度工作。 (相关功能是DynTicks选项,它消除了HZ值,并根据工作负载更改中断频率。)最常见的设置是100.高响应系统可能使用1000.最近的内核版本使用默认值250。使用大量计算工作负载可能会使用较小的值(以最小化调度程序的影响)。

因此,它是非常特定于Linux的值,您只能在/usr/include/asm/param.h

中找到它。

由于100是一个常见值,因此您只需将-DHZ=100添加到CXXFLAGS变量即可。这绝不意味着程序在OS X上实际上工作,只是它可能编译

答案 2 :(得分:0)

可能会出现命令行:

c++ -DHZ=1000 file.cpp -o file.o

很难说更多细节。这是什么操作系统?

答案 3 :(得分:0)

答案似乎不再适用于 Linux Kernel 5.8.0 - 头文件 /usr/include/asm/param.h 中只有一行,如下所示。我不知道他们为什么这样做。

#include <asm-generic/param.h>

您会在 #define HZ 中找到 /usr/include/asm-generic/param.h。下面的代码是在我的 Ubuntu 发行版中找到的,它可能与 Linux 中的代码不同,因为它是一个依赖于架构的值。

// ...
#ifndef HZ
#define HZ 100
#endif
// ....