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
risposta
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.
@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
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. –
@Reed: Grazie per aver risposto alla mia domanda. :) – t0mm13b
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.
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.
- 1. Perché MSBuild a 64 bit carica estensioni a 32 bit?
- 2. Compilare binario a 32 bit su sistema a 64 bit
- 3. Libreria di tipi a 64 bit e librerie di tipi a 32 bit fuori sincrono
- 4. Come ottenere la directory "programmi" a 64 bit nell'applicazione a 32 bit
- 5. Forza gcc per compilare programmi a 32 bit su una piattaforma a 64 bit
- 6. Esiste un modo per eseguire programmi a 64 bit su un computer a 32 bit?
- 7. windows 7 PATH errato a 64 bit durante il caricamento di una libreria a 32 bit per 32 bit exe
- 8. SQL Server 2012 a 32 bit o 64 bit su computer a 64 bit?
- 9. Impossibile trovare crtn.o, collegamento di codice a 32 bit su sistema a 64 bit
- 10. Impossibile caricare librerie SWT a 64 bit su JVM a 32 bit (sostituzione del file SWT)
- 11. Come utilizzare le librerie native a 32 bit su dispositivi Android a 64 bit
- 12. Port 32 bit driver di Windows a 64 bit Windows
- 13. Un collegamento EXE a 64 bit contro DLL a 32 bit?
- 14. Determinazione dell'architettura a 32/64 bit nell'assemblaggio
- 15. Interop da 64 a 32 bit - come?
- 16. Accesso a file da 2,3,4 GB in processo a 32 bit su Windows a 64 bit (o 32 bit)
- 17. MapViewOfFile condiviso tra processi a 32 bit e 64 bit
- 18. Build 32-bit con llvm-gcc a 64 bit
- 19. Istruzione SSE per sommare interi 32 bit a 64 bit
- 20. Inno Setup installazione dll a 32 bit e 64 bit
- 21. Compilando 32 bit Assembler su ubuntu a 64 bit
- 22. Esegui libreria a 32 bit su iPhone 5s 64 bit
- 23. prestazioni a 32 bit vs 64 bit aritmetica
- 24. Impossibile eseguire app a 32 bit su Linux a 64 bit
- 25. App Java a 64 bit: è richiesto un sistema operativo a 64 bit, JRE a 64 bit e applicazione a 64 bit?
- 26. Sto sviluppando un'applicazione a 64 bit. È possibile eseguire l'applicazione a 64 bit su un sistema operativo a 32 bit?
- 27. Applicazione a 32 o 64 bit su sistema operativo a 64 bit?
- 28. SDK Android a 32 o 64 bit su sistema operativo Windows a 64 bit?
- 29. Interoperabilità a 32 e 64 bit su Windows a 64 bit
- 30. Fare riferimento a "Programmi" su un computer a 64 bit
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
Non esiste un "thunking" equivoco in nessuno dei moderni sistemi operativi a 64 bit. Questo non funzionerà. –