Auf Squeeze überprüfen in C

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
fb13
Beiträge: 3
Registriert: 21.03.2011 14:07:47

Auf Squeeze überprüfen in C

Beitrag von fb13 » 21.03.2011 14:18:57

Hallo Leute,

Ich habe ein Programm, welches bisher unter Lenny seinen Zweck getan hat und nun nicht mehr mit Squeeze kompiliert. Bei folgender Stelle erhalte ich eine Fehlermeldung:

Code: Alles auswählen

register_printf_specifier('f', function, function_arginfo);
Fehlermeldung unter Squeeze: undefined reference to `register_printf_specifier'
Mit der Funktion register_printf_function geht es dann, die ist aber deprecated. Ich möchte nun meinen Code so umschreiben, dass eine Präprozessoranweisung zur bedingten Kompilierung führt, also:

Code: Alles auswählen

#ifndef SQUEEZE
    	register_printf_specifier('f', function, function_arginfo);
#else
    	register_printf_function('f', function, function_arginfo);
#endif
Wie finde ich nun im C Code heraus, ob Squeeze installiert ist?

Grüße

Benutzeravatar
hikaru
Moderator
Beiträge: 13926
Registriert: 09.04.2008 12:48:59

Re: Auf Squeeze überprüfen in C

Beitrag von hikaru » 21.03.2011 14:38:34

fb13 hat geschrieben:Wie finde ich nun im C Code heraus, ob Squeeze installiert ist?
Indem du dir anschaust was in /etc/debian_version steht.

fb13
Beiträge: 3
Registriert: 21.03.2011 14:07:47

Re: Auf Squeeze überprüfen in C

Beitrag von fb13 » 21.03.2011 15:06:44

Hmm, also parsen der Datei.

Ich habe diese Lösung genommen. Ist die eher nicht elegant?

Code: Alles auswählen

#ifndef (__GLIBC_MINOR__ >= 11) {		// GNU C library version >= 11 -> Squeeze or newer
       register_printf_specifier('f', function, function_arginfo);
#else
       register_printf_function('f', function, function_arginfo);
#endif

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Auf Squeeze überprüfen in C

Beitrag von bmario » 21.03.2011 15:12:18

Das hört sich eher nach einer Frage der verwendeten glibc an.

Schau mal in die Datei <gnu/libc-version.h>.
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

Benutzeravatar
schorsch_76
Beiträge: 2609
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Auf Squeeze überprüfen in C

Beitrag von schorsch_76 » 21.03.2011 15:13:50

Das hängt wohl nicht an Squeeze sondern an der Lib mit der du linkst. Er sagt dir ja mit der Meldung "undefined reference", dass er die Funktion nicht in der Bibliothek linken konnte.

Evtl. hast du den falschen Header eingebunden (oder auch gar nicht). Soweit ich weis, war reines C nicht allzu streng mit den Funktionsprototypen (Programmiere eigentlich nur in C++).

Die Version mit der glibc Versionsabfrage würde ich ähnlich machen machen :)

#if (__GLIBC_MINOR__ >= 11)
// GNU C library version >= 11 -> Squeeze or newer
register_printf_specifier('f', function, function_arginfo);
#else
register_printf_function('f', function, function_arginfo);
#endif

Gruß
schorsch

fb13
Beiträge: 3
Registriert: 21.03.2011 14:07:47

Re: Auf Squeeze überprüfen in C

Beitrag von fb13 » 21.03.2011 15:25:49

Normalerweise hat es ja geklappt. Wenn ich den obigen Code in Squeeze kompiliere, kommt ja der Fehler. Wonach sollte ich denn da überprüfen? Vermutlich auf Squeeze, oder? Wie mache ich das, ohne zu parsen? Steht das in keinem Header? Leider kann ich den Code

#if (__GLIBC_MINOR__ >= 11)
// GNU C library version >= 11 -> Squeeze or newer
register_printf_specifier('f', function, function_arginfo);
#else
register_printf_function('f', function, function_arginfo);
#endif

nicht mal testen, da ich kein Squeeze hier habe. Squeeze zu virtualisieren wird wohl ein zu großer aufwand für diese zeilen. Ich will nur gewissheit, ob das überhaupt klappt, was ich da vorhabe...

Antworten