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