Выбранный вами процессор не поддерживает набор команд x86-64

Я знаю, что уже есть несколько ответов на этот вопрос, но я не могу понять, почему я продолжаю получать эту ошибку.

Итак, вот объяснение:
У меня есть 64-битная машина, на которой я установил Windows 7 x64. Я компилирую мой код в GCC (CodeBlocks) в Windows без каких-либо проблем. Затем я решил, что мое приложение должно быть переносимым, и я решил скомпилировать его в GCC под Linux. На моей другой 32-битной машине код компилируется без проблем. Однако на моей 64-битной машине я решил установить Ubuntu как Wubi. Конечно, я также установил версию Wubi x64.

Я успешно установил Ubuntu под Wubi, я установил все необходимое, но когда я пытаюсь скомпилировать свой проект, я получаю в самой первой строке сообщение об ошибке «Выбранный вами процессор не поддерживает набор инструкций x86-64». Ладно, для меня это звучит совершенно бессмысленно, учитывая, что я установил Wubi x64 на Windows 7 x64 на 64-битной машине. Так какого черта я получаю сообщение о том, что мой процессор не поддерживает набор команд x86-64?

Может ли это быть ПРОСТО, потому что я установил WUBI вместо установки Ubuntu в root обычным способом? Я действительно не могу понять эту вещь.

большое спасибо

РЕДАКТИРОВАТЬХорошо, где-то в Codeblocks я нашел опцию, которая была проверена для архитектур «Pentium M». Я снял флажок, и теперь я получаю несколько ошибок, таких как:

ошибка: приведение от void * к int теряет точность.

По какой причине это должно происходить ТОЛЬКО в Linux, а не в Windows?

1

Решение

На основании этого комментария:

РЕДАКТИРОВАТЬ: Хорошо, где-то в Codeblocks я нашел вариант, который был проверен для архитектур «Pentium M». Я снял флажок, и теперь я получаю несколько ошибок, таких как:

Это и стало причиной проблемы компиляции — «Pentium M» представляет собой 32-битную архитектуру. gcc под CodeBlocks будет производить 32-битный код на Windows по умолчанию

Ошибка:

ошибка: приведение от void * к int теряет точность.

Вызывается потому, что модель для 64bit на Linux x64 есть LP64, где sizeof(long) == sizeof(pointer) == 64bits, а также sizeof(int) == 32bits а ты пытаешься засунуть указатель (void *) (64бит) в int(32 бита), что приводит к потере информации указателя.

С такой ошибкой компиляции, скорее всего, код не 64-битный.

По какой причине это должно происходить ТОЛЬКО в Linux, а не в Windows?

Linux на x64 по умолчанию производит 64-битные приложения, вам нужно будет добавить -m32 к опциям сборки программы, чтобы она производила 32-битный код (вероятно, для этого есть целевая опция CodeBlocks)

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]