Вопрос или проблема
Пытаюсь установить модули vmware, как показано здесь: https://superuser.com/a/1733280, но каждый раз, когда я пытаюсь запустить make
, возникает следующая ошибка
Ядро было собрано: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
Вы используете: gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
Я не могу найти информацию об этом в интернете, мне нужна помощь, так как я не очень опытен в Linux в целом.
Когда Ubuntu (Canonical) компилирует ядро, они указывают архитектуру, и это может быть кросс-компиляция в их строке команд make
. Пример из журнального файла для компиляции ядра mainline PPA:
make ARCH=x86 CROSS_COMPILE=x86_64-linux-gnu- HOSTCC=x86_64-linux-gnu-gcc-14 CC=x86_64-linux-gnu-gcc-14 RUSTC=rustc HOSTRUSTC=rustc RUSTFMT=rustfmt BINDGEN=bindgen KERNELRELEASE=6.13.0-061300rc1- CONFIG_DEBUG_SECTION_MISMATCH=y KBUILD_BUILD_VERSION="202412012327" CFLAGS_MODULE="-DPKG_ABI=061300rc1" PYTHON=python3 O=/home/kernel/COD/linux/debian/tmp-headers INSTALL_HDR_PATH=/home/kernel/COD/linux/debian/linux-libc-dev/usr -j32 headers_install
В результате получается следующая CONFIG_CC_VERSION_TEXT
в конфигурационном файле ядра:
CONFIG_CC_VERSION_TEXT="x86_64-linux-gnu-gcc-14 (Ubuntu 14.2.0-4ubuntu2) 14.2.0"
Когда я компилирую ядро, я не выполняю кросс-компиляцию, и поэтому просто использую это (я всегда измеряю время компиляции ядра):
time make -s -j13 olddefconfig bindeb-pkg LOCALVERSION=-stock
В результате получается следующая строка в конфигурационном файле ядра:
CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0"
Но если я также укажу архитектуру и элементы кросс-компиляции:
time make ARCH=x86 CROSS_COMPILE=x86_64-linux-gnu- -s -j13 olddefconfig bindeb-pkg LOCALVERSION=-test
Тогда та же строка в конфигурационном файле ядра становится:
CONFIG_CC_VERSION_TEXT="x86_64-linux-gnu-gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0"
но в остальном остается без изменений.
Так что попробуйте добавить ARCH=x86 CROSS_COMPILE=x86_64-linux-gnu-
в вашу команду make.
Ответ или решение
При установке модулей VMware в Ubuntu вы столкнулись с проблемой несовпадения версий компилятора при выполнении команды make
. Данная проблема возникает из-за того, что ядро было собрано с использованием конкретной версии компилятора для целевой архитектуры, что требует указания правильных параметров для использования компилятора в процессе сборки модулей.
Что обозначают ошибки
Сообщение об ошибке указывает, что ядро было собрано с использованием компилятора x86_64-linux-gnu-gcc-12
, а вы используете просто gcc-12
. Это различие важно для системы сборки, так как первое указывает на то, что компилятор был настроен для кросс-компиляции, в то время как второй является стандартным компилятором, не привязанным к конкретной архитектуре.
Решение задачи
Чтобы разрешить эту проблему, вам необходимо передать параметры к команде make
, указывающие на целевую архитектуру и кросс-компилятор. Ниже приведено пошаговое руководство по исправлению ошибки:
-
Откройте терминал.
-
Перейдите в директорию, где находятся исходные файлы модулей VMware.
-
Выполните команду
make
с добавлением параметров архитектуры и кросс-компилятора:make ARCH=x86 CROSS_COMPILE=x86_64-linux-gnu-
Эти параметры указывают на то, что вы собираете модули для архитектуры x86 и используете кросс-компилятор
x86_64-linux-gnu-gcc
, что позволяет убедиться, что версия компилятора соответствует требуемой для работы с вашим установленным ядром.
Примечания
-
Убедитесь, что необходимые пакеты для компиляции установлены. Это можно сделать с помощью команды:
sudo apt install build-essential linux-headers-$(uname -r)
-
Если у вас возникают другие ошибки в процессе сборки, рекомендуется внимательно изучить их и пытаться исправить по аналогии с приведенным выше примером.
-
Использование параметров
-j
может значительно уменьшить время компиляции, но имейте в виду, что использование слишком большого числа потоков на слабом оборудовании может привести к перегреву или сбоям. Рекомендуется установить это значение в пределах от 1 до числа ядер вашего процессора.
Заключение
Следуя приведённым рекомендациям, вы сможете избежать конфликта версий компилятора и успешно собрать модули VMware на вашей системе Ubuntu. Если возникают дополнительные вопросы, обратитесь к документации или сообществу пользователей Linux для получения помочь или уточнений.