Compilation d'une application 32 bits sur 64 bits, impossible de trouver -lX11

9

J'invoque une commande comme:

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

Et obtenir

/usr/bin/ld: cannot find -lX11

J'ai installé les packages suivants pour prendre en charge multiarch:

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

Mais en vain. Il ne semble pas y avoir de X11.so dans / usr / lib32, en fait il n'y a que 52 bibliothèques dans ce répertoire. J'ai l'impression que vous devriez installer manuellement les bibliothèques, mais je ne sais pas ce que je devrais vérifier ensuite.

Toute aide appréciée.

Franc
la source
1
Pouvez-vous afficher la sortie de la commande ldconfig -p | grep libX11\\.?
Martin Dirichs

Réponses:

5

Vous avez besoin des fichiers d'en-tête, qui sont fournis par les -devpackages, et non dans les packages de bibliothèque eux-mêmes. Alors, essayez d'installer libx11-dev. Cela devrait corriger cette erreur de construction particulière, bien que vous puissiez obtenir des erreurs similaires sur d'autres bibliothèques (et ensuite vous pouvez installer leurs -devpackages.)

Même si ces packages fournissent des fichiers d'en-tête plutôt que des fichiers binaires, et en général, les fichiers d'en-tête représentent toutes les architectures prises en charge via l'utilisation de macros de préprocesseur, néanmoins les -devpackages dans Ubuntu ont tendance à être spécifiques à l'architecture, et c'est le cas pour libx11-dev(comme on peut le voir ici en développant une version et en trouvant les .debpackages répertoriés libx11-devdans cette version). Étant donné que votre système Ubuntu est en 64 bits et que vous compilez un programme 32 bits qui doit être lié à la version 32 bits de la bibliothèque, vous devrez probablement installer la version 32 bits de libx11-dev. Si vous installez avec apt-getou aptitude, vous pouvez le spécifier en indiquant libx11-dev:i386comme package à installer (depuis multarch est pris en charge et utilisé).

http://packages.ubuntu.com/ est une bonne ressource pour trouver le nom du -devpackage correspondant à un package de bibliothèque. Ce n'est pas toujours le nom du package de bibliothèque immédiatement suivi de -dev; parfois, les numéros de version présents dans le nom du package de bibliothèque, en particulier après a -, sont absents dans le nom du -devpackage correspondant .

Eliah Kagan
la source