Ubuntu 11.10: wo ist /usr/include/sys??? - ist nun /usr/include/linux

Alexander Beck-Ratzka alexander.beck-ratzka at aei.mpg.de
Di Apr 17 07:46:53 UTC 2012


On Monday 16 April 2012 10:48:04 Harald Weidner wrote:
> Hallo,
> 
> >> libc6-dev-i386  installieren!
> >
> >1) mit dem Paket "libc6-dev-i386" installiere ein 32-Bit-Paket auf einem
> >64Bit Laptop. Warum soll ich ein 32-Bit Paket auf einem 64-Bit Rechner
> >installieren, um auf stat.h oder signal.h oder socket.h zugreifen zu
> >können?
> 
> Brauchst du nicht. Die Header für amd64 Compilierung sind im Paket libc6-dev
> und werden nach /usr/include/x86_64-linux-gnu/ installiert. Die Include
> Reihenfolge des C Präprozessors auf einem amd64 System ist:
> 
> harald at floyd:~$ cpp -v < /dev/null
> [...]
> #include "..." - Suche beginnt hier:
> #include <...> - Suche beginnt hier:
>  /usr/lib/gcc/x86_64-linux-gnu/4.6/include
>  /usr/local/include
>  /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
>  /usr/include/x86_64-linux-gnu
>  /usr/include
> Ende der Suchliste.
> 

Mag ja sein, aber das ist definitiv kein POSIX-Standard, dieser schreibt 
nämlich lediglich /usr/include/sys vor, und kein  /usr/include/x86_64-linux-
gnu!

Wenn ich über eine IDE wie beispielsweise Eclipse gehe, so wird 
/usr/include/x86_64-linux-gnu nicht auf den Include-Pfad gesetzt.

> Somit wird beispielsweise bei einem #include <signal.h> die Datei
> /usr/include/x86_64-linux-gnu/sys/signal.h eingebunden.
> 
> libc6-dev-i386 ist zum Compilieren von i386 Binaries auf einem amd64
> System gedacht und enthält u.a. einige Workarounds für veraltete
> Konventionen. Dazu gehören auch die genannten symbolischen Links.
> 
> >2) /usr/include/sys ist ein Standardverzeichnis seit Unix 5.4, und ich
> >kann euch garnicht sagen wieviele Produkte ich kenne, die eben auf diese
> >Standardpfade setzen.
> 
> Ein C-Quellcode sollte mit den Pfaden im Filesystem gar nichts zu tun
> haben. Sowas wie #include "/usr/include/sys/signal.h" mag zwar auf einigen
> Systemen funktionieren, ist aber nicht portabel und insbesondere nicht
> für Crosscompilierung geeignet.
> 

Es ist nur dann nicht portabel, wenn gewisse Systeme den POSIX-Standard 
ignorieren.

> >Kein signal-Handling ohne signal.h! M.E. muss jedes Unix
> >und die davon abgeleiteten Linux-Systeme zumindest über einen Link diese
> >Sache auflösen. Wenn Ubuntu dass nicht tut, dann geht Ubuntu einen ganz
> >eigenen Weg.
> Ubuntu macht genau das, was sich die Entwickler der GNU Compiler Collection
> dabei gedacht haben. Nämlich System- und Versionsabhängigkeiten in eigene
> Verzeichnisse zu packen und damit prinzipiell Builds für beliebige
> Kombinationen aus GCC-Versionen, Distributionen und Zielarchitekturen auf
> einer Maschine zu erlauben.
> 

Das muss aber nicht zum Preis der Aufgabe des POSIX-Standards geschehen. Gäbe 
es einen link von /usr/include/x86_64-linux-gnu/sys auf /usr/include/sys, dann 
gäbe es diese Probleme mit dem Verlust des Standards überhaupt nicht. Ich finde 
es wirklich bedauerlich, dass so gehandelt wird.

Liebe Grüße

Alexander




Mehr Informationen über die Mailingliste ubuntu-de