Kompilowanie 32-bitowej aplikacji na 64-bit, nie można znaleźć -lX11

9

Wywołuję polecenie takie jak:

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

I coraz

/usr/bin/ld: cannot find -lX11

Zainstalowałem następujące pakiety do obsługi multiarch:

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

Ale bez skutku. Wydaje się, że nie ma X11.so w / usr / lib32, w rzeczywistości w tym katalogu są tylko 52 biblioteki. Mam wrażenie, że powinieneś ręcznie zainstalować biblioteki, ale nie mam pewności, co powinienem sprawdzić później.

Każda pomoc doceniona.

Szczery
źródło
1
Czy możesz pokazać wynik polecenia ldconfig -p | grep libX11\\.?
Martin Dirichs,

Odpowiedzi:

5

Potrzebujesz plików nagłówkowych, które są dostarczane przez -devpakiety, a nie same pakiety bibliotek. Spróbuj zainstalować libx11-dev. To powinno naprawić ten konkretny błąd kompilacji, chociaż możesz otrzymać podobne błędy dotyczące innych bibliotek (a następnie możesz zainstalować ich -devpakiety).

Mimo że pakiety te zawierają pliki nagłówkowe, a nie pliki binarne, a ogólnie pliki nagłówkowe odpowiadają wszystkim obsługiwanym architekturom za pomocą makr preprocesora, niemniej jednak -devpakiety w Ubuntu są zazwyczaj specyficzne dla architektury i tak jest w przypadku libx11-dev(jak widać tutaj , rozszerzając wydanie i znajdując .debpakiety wymienione libx11-devw tym wydaniu). Ponieważ twój system Ubuntu jest 64-bitowy i kompilujesz program 32-bitowy, który musi łączyć się z 32-bitową wersją biblioteki, prawdopodobnie będziesz musiał zainstalować 32-bitową wersję libx11-dev. Jeśli instalujesz za pomocą apt-getlub aptitude, możesz to określić, wskazując libx11-dev:i386jako pakiet do zainstalowania (od multarch jest obsługiwany i używany).

http://packages.ubuntu.com/ jest dobrym źródłem do znalezienia nazwy -devpakietu odpowiadającego pakietowi biblioteki. Nie zawsze po nazwie pakietu biblioteki następuje bezpośrednio -dev; czasami numery wersji obecne w nazwie pakietu biblioteki, szczególnie po a -, są nieobecne w nazwie odpowiedniego -devpakietu.

Eliah Kagan
źródło