Могу ли я создать приложение x64 на 32-битной машине? - PullRequest
7 голосов
/ 31 марта 2009

Как мне разработать 64-битное приложение на 32-битном ПК?

Я использую VS 2008 на WinXP 32 бит. Я установил для компоновщика Visual Studio значение / machine: x64 и создал конфигурации x64. Все будет компилироваться и связываться нормально, но когда я запускаю средство обхода зависимостей на exe, я вижу 64-битный файл mscvr90.dll и т. Д., Указывающий на все библиотеки Win32, Kernel32.dll, Advapi32, Comdlg32, Gdi32 и т. Д.

Когда я копирую exe-файл для запуска в системе Win64, он отклоняется "... конфигурация приложения неверна". Как мне сказать Visual Studio держаться подальше от 32-битного царства?

Ответы [ 4 ]

4 голосов
/ 31 марта 2009

Да, это называется кросс-компиляция.

http://blogs.msdn.com/windowssdk/archive/2007/09/08/updated-windows-sdk-visual-c-cross-compilers.aspx

3 голосов
/ 31 марта 2009
0 голосов
/ 31 марта 2009

Поскольку вы используете VS2008, вам нужно будет либо скопировать пакет для переадресации вместе с приложением на тестовую машину, либо скомпилировать среду выполнения в виде статической библиотеки в вашем коде.

0 голосов
/ 31 марта 2009

Ваша проблема с «отклоненным» исполняемым файлом, возможно, заключается в том, что у вас нет правильного файла манифеста и / или что среды выполнения vc2008 не были (должным образом) установлены в системе. Возможно, вам нужен этот пакет времени выполнения (VS2008 native распространяемые, версия x64) в целевой системе, если не используется установка на основе MSI.

Даже в 64-битных окнах у DLL все еще есть свои 32-битные имена (что imho было плохим выбором, так как это явно смущает людей). 32-битные приложения по умолчанию будут перенаправлять% systemroot% \ system32 в% systemroot% \ syswow64 (где находятся 32-битные библиотеки DLL), тогда как 64-битные приложения не будут перенаправлены. Доступ к реестру 32-битными приложениями также связан с некоторым перенаправлением. Оба могут быть отключены для каждого потока с помощью Wow64DisableWow64FsRedirection (), но, очевидно, не позволяют 32-битным приложениям загружать 64-битные DLL.

...