2 Stimmen

HZ-Variable nicht definiert

Ich versuche gerade, den Code von jemandem zu kompilieren, und die Person verwendet eine Variable HZ (ich glaube, das steht für Hertz für die Hertzzahl des Prozessors), aber der Compiler beschwert sich, dass die Variable nicht definiert ist. Meine Vermutung ist, dass die Person nicht die richtige Header-Datei eingebunden hat.

Weiß jemand, in welcher Header-Datei HZ definiert ist?

Danke

Bearbeiten: Kompilierung funktioniert unter Debian g++ Version 4.3.2
Die Einrichtung, die ich verwende - OSX Leopard 10.5.8, g++ Version 4.0.1 ist, wo es scheitert.

8voto

greyfade Punkte 24134

Pauls Antwort ist richtig, aber ich werde es noch ein wenig erweitern.

Linux verfügt über eine Option zur Kompilierungszeit, die die Frequenz des Kernel-Timers bestimmt. Ungefähr bei der Frequenz, für die HZ definiert ist, unterbricht der Kernel-Scheduler Prozesse und beginnt mit seiner Scheduling-Arbeit. (Eine verwandte Funktion ist die Option DynTicks, die den HZ-Wert außer Acht lässt und die Unterbrechungshäufigkeit je nach Arbeitslast ändert.) Die häufigste Einstellung ist 100. Sehr reaktionsschnelle Systeme können 1000 verwenden. Neuere Kernelversionen verwenden eine Standardeinstellung von 250. Systeme mit hoher Rechenlast können einen kleineren Wert verwenden (um die Auswirkungen des Schedulers zu minimieren).

Es ist also eine sehr Linux-spezifischer Wert, und Sie finden ihn nur definiert in /usr/include/asm/param.h

Da 100 ein gebräuchlicher Wert ist, können Sie sicher sein, wenn Sie einfach -DHZ=100 zu Ihrem CXXFLAGS variabel. Dies bedeutet jedoch keineswegs, dass das Programm tatsächlich Arbeit unter OS X, nur dass es möglicherweise kompilieren .

6voto

Paul Tomblin Punkte 172816

Auf meinem Linux-Rechner ist sie definiert in /usr/include/asm/param.h:#define HZ 100

Ich kann nirgendwo auf meinem Mac OS X Rechner eine Definition finden.

0voto

just somebody Punkte 17584

Man könnte erwarten, dass es von der Kommandozeile kommt:

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

Ohne nähere Angaben ist es schwer, mehr zu sagen. Um welches Betriebssystem handelt es sich?

0voto

Roi Punkte 463

Die Antworten scheinen nicht mehr relevant zu sein Linux-Kernel 5.8.0 - Es gibt nur eine Zeile in der Header-Datei /usr/include/asm/param.h wie unten dargestellt. Ich weiß nicht, warum sie das so gemacht haben.

#include <asm-generic/param.h>

Sie finden #define HZ en /usr/include/asm-generic/param.h . Der folgende Code befindet sich in meiner Ubuntu-Distribution und kann sich von dem in Linux weil er ein architekturabhängiger Wert ist.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X