Я знаю, что уже есть несколько ответов на этот вопрос, но я не могу понять, почему я продолжаю получать эту ошибку.
Итак, вот объяснение:
У меня есть 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?
На основании этого комментария:
РЕДАКТИРОВАТЬ: Хорошо, где-то в 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)
Других решений пока нет …