Superuser

Autor Thema: Sun C-Compiler: Makro zum Erkennen des Betriebssystems  (Gelesen 6743 mal)

Offline Padde

  • Sobl Bachelor
  • ***
  • Beiträge: 135
  • Hier könnte Ihre Werbung stehen!
Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« am: 26. März 2007, 09:16:01 »
Hallo,

derzeit versuche ich, einige C-Programme auf Solaris zu portieren. Als ich diese vor längerer Zeit für FreeBSD und NetBSD entwickelte, hatte ich häufig von bedingter Kompilierung Gebrauch gemacht. Es handelt sich dabei um relativ "systemnahe" Programme, und da gibt es doch häufig subtile Unterschiede zwischen den verschiedenen Unices, was dann zu Konstrukten wie den folgenden führt:

#ifdef __FreeBSD__
  // ... FreeBSD-related stuff ...
#endif

#ifdef __NetBSD__
  // ... NetBSD-related stuff ...
#endif

Das funktioniert so aber nur mit dem GCC, bei dem man sich netterweise auch mit -dM alle vom Compiler bereitgestellten Makros auflisten lassen kann.

Unter Solaris soll das ganze natürlich mit dem Sun C-Compiler (Version 5.8) kompiliert werden. Aber mit welchem Makro kann ich dann erkennen, daß ich unter Solaris unterwegs bin? Leider habe ich dazu keinerlei Informationen finden können. Etwas ähnliches wie -dM, um sich einen Überblick zu verschaffen, scheint es nicht zu geben.

Alternativ könnte man natürlich auch beim Compiler-Aufruf "von Hand" ein Makro wie __SunOS__ o.ä. setzen oder mit uname(3) hantieren. "Sauberer" fände ich es aber, wenn der Compiler ein Makro liefern würde.

Das beschäftigt mich jetzt schon eine ganze Weile. Vielleicht kennt sich jemand von euch besser mit dem Sun-Compiler aus und kann mir da einen Tip geben. Danke im Voraus. :)
« Letzte Änderung: 26. März 2007, 09:18:21 von Padde »

sonnenblen.de - Das unabhängige Sun User Forum

Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« am: 26. März 2007, 09:16:01 »

llothar

  • Gast
Re: Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« Antwort #1 am: 26. März 2007, 09:37:30 »
Also wenn ich mit dem GCC

'cpp -dM /dev/null'

eintippe, kriege ich alle predefined macros aufgelistet. Kannst ja mal schauen ob es sowas auch bei Suns Compiler gibt. Und wenn du es weisst, nochmal melden, das interessiert mich demnächst auch.

Offline Padde

  • Sobl Bachelor
  • ***
  • Beiträge: 135
  • Hier könnte Ihre Werbung stehen!
Re: Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« Antwort #2 am: 26. März 2007, 11:19:48 »
Wie ich eingangs schon geschrieben habe: Ich konnte nichts finden, was dem -dM von GCC entspricht. Genau das ist ja mein Problem.  ???

Offline escimo

  • Sobl Moderator
  • Sobl Guru
  • *****
  • Beiträge: 1643
  • SPARCstation 2
    • Youtube-Kanal opensparcbox.org
Re: Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« Antwort #3 am: 26. März 2007, 12:53:57 »
Vielleicht helfen Dir Informationen unter folgendem Link:

http://docs.sun.com/source/806-3567/sun.html

Gruß
escimo

Offline Padde

  • Sobl Bachelor
  • ***
  • Beiträge: 135
  • Hier könnte Ihre Werbung stehen!
Re: Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« Antwort #4 am: 26. März 2007, 14:34:17 »
Danke dir, das bringt mich schon ein gutes Stück weiter. Etwas unglücklich finde ich allerdings diese Definition hier:

__`uname -s`_`uname -r` (example: __SunOS_5_7)
Das hätte IMO vielleicht besser so aussehen sollen:

__`uname -s`=`uname -r` (example: __SunOS=5_7)
Dann könnte man die Versionsnummer immer noch explizit abfragen, wenn man sie wirklich braucht, aber ansonsten einfach mit __SunOS arbeiten. Doch so muß ich ja nun jede Solaris-Version, auf der ich mein Programm laufen lassen will, in die Prüfung einbeziehen:

#if (defined __Sun_OS_5_8) || (defined __Sun_OS_5_9) || (defined __Sun_OS_5_10)
  // ... Solaris-related stuff ...
#endif

Mit Wildcards kann man bei Präprozessor-Direktiven vermutlich nicht arbeiten. :-[ Wie kann man Solaris sonst eindeutig identifizieren? Mit __sun && __unix vielleicht? Hmm, das muß ich mir nochmal genauer ansehen.

PS: Der RAM für die SS20 ist angekommen und funktioniert.

Offline escimo

  • Sobl Moderator
  • Sobl Guru
  • *****
  • Beiträge: 1643
  • SPARCstation 2
    • Youtube-Kanal opensparcbox.org
Re: Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« Antwort #5 am: 26. März 2007, 17:21:47 »
Danke dir, das bringt mich schon ein gutes Stück weiter.
Freut mich. :)

PS: Der RAM für die SS20 ist angekommen und funktioniert.
Der Speicher war ja leider nicht so toll (Antistatik-Hüllen) verpackt. :-[
Aber wenn die DIMMs nicht beschädigt wurden oder sind, bin ich schon sehr zufrieden. Wieviele MB sind es insgesamt?

Gruß
escimo

Offline Padde

  • Sobl Bachelor
  • ***
  • Beiträge: 135
  • Hier könnte Ihre Werbung stehen!
Re: Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« Antwort #6 am: 27. März 2007, 08:48:07 »
Es handelte sich bei allen acht Modulen um solche mit 16 MB. Leider konnte ich davon nur zwei verwenden, da schon sechs Module in der Kiste eingebaut waren. Insgeheim hatte ich gehofft, daß auch ein paar 32er oder gar 64er dabei sind und ich vorhandene Module durch größere ersetzen kann. Aber das macht nichts, ich will nicht meckern, schon gar nicht bei dem Preis. So habe ich halt ein paar Ersatzteile für den Fall der Fälle.

Was die Sache mit den Makros angeht, werde ich das wohl doch per Makefile lösen, da das mit den Versionsnummern im Makronamen doch etwas umständlich ist.

Offline escimo

  • Sobl Moderator
  • Sobl Guru
  • *****
  • Beiträge: 1643
  • SPARCstation 2
    • Youtube-Kanal opensparcbox.org
Re: Sun C-Compiler: Makro zum Erkennen des Betriebssystems
« Antwort #7 am: 27. März 2007, 17:24:36 »
Danke für die Info.

Code: (c) [Auswählen]
#if (defined __Sun_OS_5_8) || (defined __Sun_OS_5_9) || (defined __Sun_OS_5_10)
  // ... Solaris-related stuff ...
#endif
Das sieht aber nicht weiter kompliziert aus. Bei 3 Versionen auch nicht weiter schlimm. Oder warum willst du das Problem umgehen und mit einem Makefile lösen?

Gruß
Stephan