User Tools

Site Tools


doc:appunti:linux:sa:multiarch

Architettura multipla su Debian

Con questo sistema dovrebbe essere possibile eseguire un binario i386 su una macchina amd64. Utile aad esempio per eseguire un software non libero, distribuito solo per una architettura.

Questo sistema ha funzionato su una Debian Stretch, ma dovrebbe funzionare ugualmente su una 8 Jessie.

Anzitutto si verifica quale architettura è installata e quali architetture “straniere” sono state installate.

dpkg --print-architecture
dpkg --print-foreign-architectures

Supponendo che si sia installata la amd64, per aggiungere il supporto base a i386 si esegue:

dpkg --add-architecture i386
apt-get update
apt-get install libstdc++6:i386

Da questo punto in poi l'eseguibile i386 dovrebbe partire, eventuali librerie mancanti si scoprano con ldd e strace.

Cross compilazione

Come fare per compilare un software i386 su una macchina amd64? Su una Debian moderna (ad esempio una Debian 9 Stretch) dovrebbe essere sufficiente installare i pacchetti:

apt-get install gcc-multilib g++-multilib

Ovviamente sarà necessario installare gli header delle librerie per l'architettura target, ad esempio:

apt-get install libssl-dev:i386

Poi, a seconda dell'ambiente di configurazione/compilazione si dovrà settare alcune variabili di ambiente. Ad esempio:

export CFLAGS='-m32'
export CXXFLAGS='-m32'
export LDFLAGS='-m32'

Oppure per l'ambiente di configurazione CMake:

cmake -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_SHARED_LINKER_FLAGS=-m32 /path/to/source/
doc/appunti/linux/sa/multiarch.txt · Last modified: 2018/04/13 17:00 by niccolo