Beim Kompilieren der 32-Bit-App auf 64-Bit kann -lX11 nicht gefunden werden

9

Ich rufe einen Befehl auf wie:

g++ ... -o"myapp" -lX11 ...

Und bekommen

/usr/bin/ld: cannot find -lX11

Ich habe die folgenden Pakete installiert, um Multiarch zu unterstützen:

ia32-libs, libc6-dev-i386 and g++-multilib

Aber ohne Erfolg. Es scheint keine X11.so in / usr / lib32 zu geben, tatsächlich befinden sich nur 52 Bibliotheken in diesem Verzeichnis. Ich habe den Eindruck, dass Sie Bibliotheken manuell installieren sollten, aber ich weiß nicht, was ich als nächstes überprüfen soll.

Jede Hilfe geschätzt.

Frank
quelle
1
Können Sie die Ausgabe des Befehls anzeigen ldconfig -p | grep libX11\\.?
Martin Dirichs

Antworten:

5

Sie benötigen die Header-Dateien, die von -devPaketen bereitgestellt werden, und nicht in den Bibliothekspaketen selbst. Versuchen Sie es also libx11-dev. Das sollte diesen speziellen Build-Fehler beheben, obwohl Sie möglicherweise ähnliche Fehler bei anderen Bibliotheken erhalten (und dann deren -devPakete installieren können ).

Obwohl diese Pakete eher Header-Dateien als Binärdateien bereitstellen und Header-Dateien im Allgemeinen alle unterstützten Architekturen durch die Verwendung von Präprozessor-Makros berücksichtigen, sind -devPakete in Ubuntu in der Regel architekturspezifisch, und dies ist libx11-dev(wie zu sehen ist) der Fall hier durch Erweitern einer Version und Suchen der in dieser Version .debaufgeführten Pakete libx11-dev). Da Ihr Ubuntu-System 64-Bit ist und Sie ein 32-Bit-Programm kompilieren, das mit der 32-Bit-Version der Bibliothek verknüpft werden muss, müssen Sie wahrscheinlich die 32-Bit-Version von installieren libx11-dev. Wenn Sie mit apt-getoder installieren aptitude, können Sie dies angeben, indem Sie libx11-dev:i386als zu installierendes Paket angeben (seit Multarch wird unterstützt und verwendet).

http://packages.ubuntu.com/ ist eine gute Quelle, um den Namen des -devPakets zu finden, das einem Bibliothekspaket entspricht. Es ist nicht immer der Name des Bibliothekspakets, unmittelbar gefolgt von -dev; Manchmal fehlen im Namen des Bibliothekspakets Versionsnummern, insbesondere nach a -, im Namen des entsprechenden Pakets.-dev

Eliah Kagan
quelle