Compilando l'app a 32 bit su 64 bit, non è possibile trovare -lX11


9

Sto invocando un comando come:

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

E ottenere

/usr/bin/ld: cannot find -lX11

Ho installato i seguenti pacchetti per supportare multiarch:

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

Ma inutilmente. Non sembra esserci alcun X11.so in / usr / lib32, in realtà ci sono solo 52 librerie in quella directory. Ho l'impressione che dovresti installare manualmente le librerie, ma non riesco a capire cosa dovrei controllare dopo.

Qualsiasi aiuto apprezzato.


1
Puoi mostrare l'output del comando ldconfig -p | grep libX11\\.?
Martin Dirichs,

Risposte:


5

Sono necessari i file di intestazione, forniti dai -devpacchetti, e non nei pacchetti della libreria stessi. Quindi, prova a installare libx11-dev. Ciò dovrebbe risolvere questo particolare errore di compilazione, sebbene si possano ottenere errori simili su altre librerie (e quindi è possibile installare i relativi -devpacchetti).

Anche se questi pacchetti forniscono file di intestazione anziché binari e, in generale, i file di intestazione tengono conto di tutte le architetture supportate attraverso l'uso di macro di preprocessore, tuttavia i -devpacchetti in Ubuntu tendono ad essere specifici dell'architettura, e questo è il caso libx11-dev(come si può vedere qui espandendo una versione e trovando i .debpacchetti elencati libx11-devin quella versione). Poiché il tuo sistema Ubuntu è a 64 bit e stai compilando un programma a 32 bit che deve essere collegato alla versione a 32 bit della libreria, probabilmente dovrai installare la versione a 32 bit di libx11-dev. Se stai installando con apt-geto aptitude, puoi specificarlo indicando libx11-dev:i386come pacchetto da installare (dal momento che multarch è supportato e in uso).

http://packages.ubuntu.com/ è una buona risorsa per trovare il nome del -devpacchetto corrispondente a un pacchetto di libreria. Non è sempre il nome del pacchetto della libreria immediatamente seguito da -dev; a volte i numeri di versione presenti nel nome del pacchetto della libreria, specialmente dopo a -, sono assenti nel nome del -devpacchetto corrispondente .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.