2009-12-22 20 views
15

Ho una libreria solo binario a 32 bit e devo generare un programma a 64 bit che lo utilizza. C'è un modo per avvolgerlo o convertirlo, quindi può essere usato con un programma a 64 bit?Collegamento di librerie a 32 bit a programmi a 64 bit

+0

Stavo per suggerire di ricompilare il codice della libreria che mira a 64 bit, ma ho l'impressione che non ne abbia la fonte ... Sono dubbioso che un codice a 64 bit possa "thunk" attraverso a 32 bit ... forse può farlo sotto gcc di linux? Ma poi di nuovo questo "thunking" era una caratteristica di Win95 (Ricorda che?) Codice a 32 bit che chiama codice a 16 bit ... hai provato a collegare il codice a 64 bit facendo riferimento alla libreria dinamica a 32 bit (.so) e facendolo funzionare? – t0mm13b

+0

Non esiste un "thunking" equivoco in nessuno dei moderni sistemi operativi a 64 bit. Questo non funzionerà. –

risposta

27

No. Non è possibile collegare direttamente al codice a 32 bit all'interno di un programma a 64 bit.

L'opzione migliore è compilare un programma a 32 bit (standalone) in grado di run on your 64bit platform (using ia32) e quindi utilizzare una forma di comunicazione tra processi per comunicare ad esso dal programma a 64 bit.

+1

@Reed: Allora come ha fatto Win95 a gestire la transizione dal codice a 32 bit chiamando a 16 bit a "thunking"? Era a livello di assemblatore di cambiare attorno al puntatore e ai registri dello stack? – t0mm13b

+6

Il sistema operativo ha gestito questo problema in modo esplicito, ma non c'è nulla che permetta questo in Linux o nei moderni sistemi operativi Windows a 64 bit, quindi è necessario utilizzare una soluzione alternativa come quella che ho postato. –

+0

@Reed: Grazie per aver risposto alla mia domanda. :) – t0mm13b

3

E 'possibile, ma non senza un po' di magia seria dietro le quinte e non ti piacerà la risposta. Emulare una CPU a 32 bit (no non sto scherzando) o passare il processo principale a 32 bit. L'emulazione potrebbe essere lenta.

This is a proof of concept della tecnica.

Quindi mantenere una tabella di ogni accesso alla memoria dalla libreria a 32 bit e mantenerli sincronizzati. È molto difficile arrivare a una completezza teorica, ma qualcosa di lavorabile dovrebbe essere abbastanza facile, ma molto noioso.

Nella maggior parte dei casi, credo che due processi e quindi l'IPC tra i due potrebbero effettivamente essere più semplici, come suggerito in altri termini.

4

Per un esempio di utilizzo di IPC per l'esecuzione di plug-in a 32 bit da codice a 64 bit, consultare l'open source NSPluginWrapper.

Problemi correlati