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

Harald Weidner hweidner-lists at gmx.net
Mo Apr 16 10:48:04 UTC 2012


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.

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.

>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.

Gruß, Harald



Mehr Informationen über die Mailingliste ubuntu-de