Вопрос или проблема
Я пытаюсь запустить Qemu через VS Code, у меня это настроено как task.json
{
"label": "Launch QEMU",
"type": "shell",
"command": "qemu-system-x86_64",
"args": [
],
"problemMatcher": [],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"isBackground": false
}
Я получаю ошибку qemu-system-x86_64: symbol lookup error: /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE
Это работает из терминала (ctrl alt T), поэтому я предполагаю, что это как-то связано с тем, как vscode вызывает его.
Я пробовал вручную определить, чтобы терминал переходил на gnome terminal (по адресу /usr/bin/gnome-terminal.real) в настройках, но это дает мне # Failed to parse arguments: Unknown option -c
Создание скрипта и попытка запустить его дает мне qemu-system-x86_64: symbol lookup error: /snap/core20/current/lib/x86_64-linux-gnu/libpthread.so.0: undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE
Я перехожу с Windows и Visual Studio Community, где у меня просто был путь к Qemu установлен как целевой отладчик. Я очень новичок в Ubuntu и Linux в целом, поэтому, пожалуйста, дайте знать, если я что-то упустил, и пожалуйста, будьте терпеливы.
Ответ или решение
Теория
Одной из главных задач при использовании Qemu через Visual Studio Code (VS Code) является корректная настройка среды исполнения, учитывая особенности операционной системы Linux, особенно если вы недавно перешли с Windows. Ошибка, с которой вы столкнулись, связана с несовместимостью библиотек, особенно выделяется проблема с libpthread.so.0
и GLIBC_PRIVATE
.
Пример
Работает Qemu в терминале, но не из VS Code? Это может указывать на различия сред исполнения. В терминале системы он успешно запускается, потому что там установлены и правильно настроены все переменные окружения и доступные библиотеки. В VS Code же задания могут не учитывать такие установки, и это приводит к ошибкам.
Применение/Рекомендации
-
Проверка переменных окружения:
Когда вы запускаете Qemu в терминале, используется определенный набор переменных окружения (
PATH
,LD_LIBRARY_PATH
и другие). Проверьте настройки вашего терминала командой:env
Затем убедитесь, что VS Code использует такие же переменные.
-
Конфигурация tasks.json:
В VS Code вы настроили
tasks.json
, но не указали в нем переменные окружения. Попробуйте дополнить его:{ "label": "Launch QEMU", "type": "shell", "command": "qemu-system-x86_64", "args": [], "options": { "env": { "PATH": "/snap/core20/current/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" } }, "problemMatcher": [], "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared" }, "isBackground": false }
-
Использование оболочки, соответствующей терминалу:
Если стандартная оболочка не решает проблему, попробуйте указать использование той же оболочки, что и терминал:
"options": { "shell": { "executable": "/bin/bash", "args": ["-c"] } }
-
Проверка и обновление библиотек:
Ошибка совместима с помещением неправильной версии библиотеки в
snap
. Попробуйте либо обновитьsnap
, либо использовать другую версию Qemu. Выполните следующие команды, чтобы обновить системы и пакеты:sudo apt update sudo apt upgrade
-
Snap и проблемы совместимости:
Если версия Qemu установлена через
snap
, возможно, стоит переключиться на версию изapt-get
(или иной источник) для исключения особенностей контейнеризации Snap. -
Отладка:
Чтобы понять детальнее проблему, можно задавать подробные параметры лога при запуске Qemu:
export LIBC_FATAL_STDERR_=1 qemu-system-x86_64
Этот подход поможет получить больше информации о том, на каком шаге происходит сбой.
Способы решения предполагают адаптацию под Linux и более глубокое понимание его особенностей. Особенностью работы в этой ОС является акцент на гибкость настроек, что с одной стороны сложнее, а с другой – позволяет значительно расширить возможности в будущем.