Tengo una biblioteca .so binaria de 32 bits y tengo que generar el programa de 64 bits que la usa. ¿Hay alguna manera de ajustarlo o convertirlo, por lo que se puede usar con un programa de 64 bits?Vinculación de la biblioteca de 32 bits al programa de 64 bits
Respuesta
No. No se puede vincular directamente al código de 32 bits dentro de un programa de 64 bits.
La mejor opción es compilar un programa de 32 bits (independiente) que puede run on your 64bit platform (using ia32), y luego usar una forma de comunicación entre procesos para comunicarse desde su programa de 64 bits.
@Reed: Entonces, ¿cómo manejó Win95 la transición desde el código de 32 bits llamando a 16bit a la 'thunking'? ¿Eso fue en el nivel de ensamblador para cambiar alrededor del puntero de la pila y los registros? – t0mm13b
El sistema operativo manejó esto explícitamente, pero no hay nada que lo permita en Linux o en los sistemas operativos Windows modernos de 64 bits, por lo que debe usar una solución como la que publiqué. –
@Reed: Gracias por responder mi pregunta. :) – t0mm13b
Es posible, pero no sin algunas magias serias entre bastidores y no le gustará la respuesta. Emule una CPU de 32 bits (no, no estoy bromeando) o cambie el proceso principal a 32 bits. Emular puede ser lento sin embargo.
This is a proof of concept de la técnica.
A continuación, guarde una tabla de cada acceso a memoria desde y hacia la biblioteca de 32 bits y manténgala sincronizada. Es muy difícil llegar a una integridad teórica, pero algo viable debería ser bastante fácil, pero muy tedioso.
En la mayoría de los casos, creo que dos procesos y luego el IPC entre los dos pueden ser más fáciles, como se sugiere de otra manera.
Para ver un ejemplo del uso de IPC para ejecutar complementos de 32 bits a partir del código de 64 bits, consulte el código abierto NSPluginWrapper.
- 1. Windows 7 64 bits incorrecta PATH al cargar la biblioteca de 32 bits para 32 bits exe
- 2. Usando la biblioteca de 32 bits en el programa C++ de 64 bits
- 3. 64 bits por división de 32 bits
- 4. conversión de aplicación .NET 32 bits a 64 bits
- 5. Objeto compartido/bibliotecas mixtas de 32 bits y 64 bits
- 6. Ejecute AnyCPU como 32 bits en sistemas de 64 bits
- 7. Registros de 64 bits en ventanas de 32 bits
- 8. Compilación de 32 bits con llvm-gcc de 64 bits
- 9. ¿Aplicación de 32 bits o de 64 bits en el sistema operativo de 64 bits?
- 10. Determinación de Windows de 64 bits frente a 32 bits
- 11. uso de 32 bits de servidor COM desde un programa de 64 bits .NET
- 12. Cargar biblioteca de 32 bits DLL en la aplicación de 64 bits
- 13. Cargar biblioteca compartida de 32 bits desde la aplicación de 64 bits?
- 14. Agregar números de 64 bits con aritmética de 32 bits
- 15. Mezcla de 32 bits y 64 bits P/Invoca
- 16. ¿iPhone OS es de 64 bits o 32 bits?
- 17. MapViewOfFile compartido entre procesos de 32 bits y 64 bits
- 18. Puerto 32 bits Controlador de Windows a 64 bits Windows
- 19. Compilación de la aplicación matlab de 32 bits en la máquina de 64 bits (C++)
- 20. Compatibilidad con Java de 32 bits frente a 64 bits
- 21. Java JDK 32 bits frente a 64 bits
- 22. Utilice un instalador de NSIS para instalar binarios de 32 bits en sistemas operativos de 32 bits y binarios de 64 bits en sistemas operativos de 64 bits.
- 23. ¿Puedo controlar la arquitectura (32 bits frente a 64 bits) al compilar un ejecutable de pyinstaller?
- 24. ¿Cómo compilar un programa C++ como de 64 bits en una máquina de 64 bits?
- 25. individual de 32 bits con 32 MSI/controladores de 64 bits
- 26. Eclipse 32 bits ejecutándose en 64 bits JVM
- 27. c: ¿usa punteros de 32 bits en la aplicación de 64 bits?
- 28. Wendy ASP.NET AJAX Error/32 bits a 64 bits
- 29. ¿Utiliza la versión de 32 bits de ODBC en Windows 7 de 64 bits?
- 30. Escribiendo al registro de 64 bits desde el instalador de 32 bits
Iba a sugerir recompilar el código de la biblioteca que apunta a 64 bits, pero da la impresión de que no tiene el origen ... Dudo que un código de 64 bits pueda 'pasar' a 32 bits ... puede hacerlo bajo gcc de linux? Pero, de nuevo, este 'thunking' era una característica de Win95 (¿Te acuerdas de eso?) Código de 32 bits que llama a código de 16 bits ... ¿has intentado vincular el código de 64 bits que hace referencia a la biblioteca dinámica de 32 bits (.so) y ejecutarlo? – t0mm13b
No existe un equivalente "thunk" en ninguno de los sistemas operativos modernos de 64 bits. Esto no funcionará –