我现在正在尝试编译某人的代码,而该人正在使用变量 HZ(我认为它代表赫兹代表 CPU 的赫兹),但编译器抱怨该变量未定义。我的猜测是这个人没有包含正确的头文件。
那么有谁知道 HZ 是在哪个头文件中定义的?
谢谢
编辑:编译适用于 Debian g++ 版本 4.3.2
我正在使用的设置 - OSX Leopard 10.5.8,g++ 版本 4.0.1 是它失败的地方。
我现在正在尝试编译某人的代码,而该人正在使用变量 HZ(我认为它代表赫兹代表 CPU 的赫兹),但编译器抱怨该变量未定义。我的猜测是这个人没有包含正确的头文件。
那么有谁知道 HZ 是在哪个头文件中定义的?
谢谢
编辑:编译适用于 Debian g++ 版本 4.3.2
我正在使用的设置 - OSX Leopard 10.5.8,g++ 版本 4.0.1 是它失败的地方。
保罗的回答是正确的,但我会扩大一点。
Linux 有一个编译时选项,它决定了内核定时器的频率。大约在 HZ 定义的频率下,内核调度程序将中断进程并开始其调度工作。(一个相关的特性是 DynTicks 选项,它省略了 HZ 值,并根据工作负载更改中断频率。)最常见的设置是 100。高响应系统可能使用 1000。最近的内核版本使用默认值 250。系统计算工作量大的可能使用较小的值(以最小化调度程序的影响)。
因此,它是一个非常特定于 Linux 的值,您只会发现它在/usr/include/asm/param.h
由于 100 是一个常见值,因此您可以安全地添加-DHZ=100
到CXXFLAGS
变量中。这绝不意味着该程序实际上可以在 OS X 上运行,只是它可以编译.
在我的 Linux 机器上,它定义在/usr/include/asm/param.h:#define HZ 100
我在 Mac OS X 机器上的任何地方都找不到定义。
它可能来自命令行:
c++ -DHZ=1000 file.cpp -o file.o
很难说更多没有更多细节。这是什么操作系统?
答案在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
// ....