Компиляция как для x86, так и для x64

Можно ли настроить компилятор таким образом, чтобы он компилировал исполняемый файл/DLL как для x86, так и для x64? Я имею в виду, что один файл подходит для обеих платформ.

Я знаю только способ выбрать платформы по отдельности, но я хочу обе.

Является ли это возможным?


person Pateman    schedule 07.10.2011    source источник


Ответы (1)


Исполняемый файл x86 полностью поддерживается на хосте x64. Например. любой EXE-файл, который вы скомпилируете в 32-битном режиме, будет без проблем работать на 32-битном и 64-битном хосте. Если вы не знаете, зачем вам нужен 64-битный исполняемый файл, вы, вероятно, этого не знаете, так что одного 32-битного исполняемого файла будет достаточно.

Однако с DLL дело обстоит иначе. Архитектура DLL (32-разрядная или 64-разрядная) должна совпадать с исполняемым файлом, в котором будет использоваться DLL. Например. если вы пишете расширение Проводника для x64 Windows, файл explorer.exe будет 64-разрядным, поэтому ваша DLL также должна быть 64-разрядной, иначе ее нельзя будет загрузить.

Невозможно объединить две разные архитектуры в одну DLL или EXE в Windows. Таким образом, вам понадобятся две библиотеки DLL, если вам нужно поддерживать как 32-разрядные, так и 64-разрядные хосты.

person haimg    schedule 07.10.2011
comment
Что касается объединения 32-битных и 64-битных файлов в один исполняемый файл, вы можете сделать это с помощью 32-битного самораспаковывающегося файла, который обнаружит платформу и извлечет/запустит правильный EXE-файл для текущей платформы. Однако это не будет иметь никакой реальной выгоды по сравнению с двумя исполняемыми файлами. - person Jerry Gagnon; 07.10.2011
comment
@haimg: 32-битный EXE-файл может работать в 64-битной системе Windows, только если установлен компонент WOW64. В ранних 64-разрядных версиях Windows WOW64 был обязательным компонентом, но, начиная с Windows Server 2008 R2, WOW64 теперь является необязательным, поэтому его можно устанавливать или не устанавливать. - person Remy Lebeau; 07.10.2011
comment
@RemyLebeau-TeamB: верное замечание. Однако видели ли вы когда-нибудь настоящую производственную систему с удаленным WOW64? Я не могу себе представить, что за пределами области встроенных систем... - person haimg; 07.10.2011
comment
@haimg Это должно быть обычным явлением в мире серверов, где обычно машины работают с очень небольшим количеством установленного программного обеспечения. - person David Heffernan; 08.10.2011
comment
Тем не менее, в какой-то момент поддержка 32-битной версии будет прекращена, и тогда ваше приложение будет ломаться лучше, чтобы сделать перекомпиляцию сейчас и предотвратить душевную боль позже. - person Johan; 08.10.2011
comment
@jerry сам экстрактор будет либо 32-битным, либо 64-битным, так что он ничего не решает, он просто заменяет одну проблему другой - person Johan; 08.10.2011
comment
К сожалению, утверждение о том, что x86 поддерживается на любом хосте x64, больше не соответствует действительности. См. msdn.microsoft.com/en-us. /библиотека/dd371790%28v=VS.85%29.aspx - person Harry Johnston; 08.10.2011
comment
Это будет холодный день в аду, прежде чем 32-битная поддержка будет поэтапно прекращена на среднем сервере ;-) По этой причине я бы не стал тратить время на переход на 64-битный исполняемый файл. Делайте это, потому что есть необходимость, или вы начинаете с нуля, а не потому, что беспокоитесь о том, что ваше приложение не будет работать на сервере. - person Misha; 08.10.2011