Здесь следует различать несколько вещей:
- Существуют 32- и 64-битные «платформы», работающие на том же процессоре .Один и тот же процессор X86-64 может работать в режиме или x86 или AMD64.Это определяет, помимо прочего, количество доступных регистров, их размеры, структуру стека, различное соглашение о вызовах и некоторые разные коды операций (также обратите внимание, что во многих операционных системах 32-битный код будет работать на каком-либо уровне совместимости в 64-битной ОС безпроблемы)
- Существуют компиляторы для одной или этих платформ, и есть компиляторы, которые могут выдавать любой из (но не оба одновременно).
- Компилятор может отличаться от платформы, для которой построена программа (так называемый кросс-компилятор, очень распространенная вещь, например, при разработке для встроенных систем, но вы также можете кросс-компилировать, например, для Windows-32 из Linux-64 или наоборот, или скомпилируйте для Win64 на компьютере с Win32).
- В дополнение к платформе, есть разница в сгенерированном коде для конкретной модели (переключатель
-march
).Это решает, какое поколение процессора предполагается, что определяет, какие инструкции можно использовать при генерации кода.Не каждая комбинация платформы и архитектуры является действительной (это ваша проблема: если предположить, что 25-летний процессор 386 означает, что он не может работать в режиме AMD64). - При желании вы можете даже запланировать что-то другое, чемВы генерируете код для.Например, вы можете сгенерировать код, который использует инструкции вплоть до Pentium III, но запланирован для Core i7.Это будет работать (субоптимально, но будет работать) практически на каждом процессоре и оптимально работать на новейшей линии.
- Наконец, есть много переключателей, таких как
-msse
семейство, которое дополнительно включает / отключает инструкции.
Вы не указали «Windows», «Linux» или что-либо еще, поэтому сложно дать точный ответ, в чем заключается ваша проблема, но давайтепредположим, что вы используете, например, MingW-w64.Этот компилятор позволяет вам создавать как 32-, так и 64-битный код, в зависимости от того, что вы ему скажете.Очевидно, что если вы скажете ему генерировать код в режиме 64 (по умолчанию!), То i386 не будет хорошим выбором.Если вы укажете -m32
в качестве параметра командной строки, он сгенерирует 32-битный код, и он будет работать.
Это может помочь найти более конкретный ответ, если вы скажете точно , какой компилятор вы используете.использовать.Code :: Blocks поставляется (опционально), например, со сборкой TDM 4.5.1 в Windows, но использует все, что есть в других операционных системах.