2009-03-31 17 views
7

¿Cómo desarrollo una aplicación de 64 bits en una PC de 32 bits?¿Puedo construir la aplicación x64 en una máquina de 32 bits?

Estoy usando VS 2008 en WinXP 32 bit. Configuré el enlazador visual studio en/machine: x64 y creé las configuraciones x64. Todos compilarán y vincularán OK, pero cuando ejecuto el walker de dependencias en el exe veo el mscvr90.dll de 64 bits, etc. apuntando a todos los dlls de Win32, Kernel32.dll, Advapi32, Comdlg32, Gdi32, etc.

Cuando copio el exe para ejecutar en un sistema Win64, se rechaza "... la configuración de la aplicación es incorrecta". ¿Cómo le digo a Visual Studio que se mantenga alejado del reino de 32 bits?

Respuesta

3
+0

Ninguno de esos enlaces parece relevante para problemas de tiempo de ejecución nativos (mscvr90.dll), y el póster ya tiene resuelta la parte de compilación cruzada? – snemarch

+0

@snemarch, ¿crees que no le faltan algunos componentes de 64 bits? –

+0

Como noté en mi respuesta, creo que le falta el redist nativo VS2008, no el CLR :) – snemarch

0

Su problema con "rechazada" ejecutable es probable que le falta un archivo de manifiesto correcta, y/o que los tiempos de ejecución VC2008 no han sido (correctamente) instalado en el sistema. Probablemente necesite this runtime package (VS2008 nativos redistribuibles, versión x64) en el sistema de destino, si no utiliza una instalación basada en .msi.

Incluso en las ventanas de 64 bits, las DLL todavía tienen sus nombres de 32 bits (lo cual fue una mala elección, ya que obviamente confunde a las personas). Las aplicaciones de 32 bits tendrán de forma predeterminada% systemroot% \ system32 redirigido a% systemroot% \ syswow64 (donde residen las DLL de 32 bits), mientras que las aplicaciones de 64 bits no se redireccionarán. El acceso al registro por las aplicaciones de 32 bits también tiene alguna redirección involucrada. Ambos se pueden deshabilitar por subproceso con Wow64DisableWow64FsRedirection(), pero obviamente no permite que las aplicaciones de 32 bits carguen archivos DLL de 64 bits.

+0

solo curiosidad, ¿por qué crees que fue una mala elección? ¿Es porque es difícil saber si el archivo que está buscando tiene 32 o 64 bits sin ejecutarlo o usar una herramienta para inspeccionar el archivo u otro? – JohnW

+0

John> sí, eso es parte de la razón. Mi mayor queja es con la redirección, tendría más sentido tener un sistema64. El uso de nombres * 32.dll para aplicaciones de 64 bits lamentablemente tiene un poco de sentido (LoadLibrary + GetProcAddress). – snemarch

0

Dado que está utilizando VS2008, tendrá que copiar el paquete de redist junto con su aplicación en la máquina de prueba o compilar el tiempo de ejecución como una biblioteca estática dentro de su código.

Cuestiones relacionadas