Вопрос или проблема
Я пытаюсь развернуть приложение Qt6 на машине с Ubuntu 24.04. Вот содержимое моей папки dist:
.
├── libQt6Core.so
├── libQt6Core.so.6
├── libQt6Core.so.6.8.0
├── libQt6Gui.so
├── libQt6Gui.so.6
├── libQt6Gui.so.6.8.0
├── libQt6SerialPort.so
├── libQt6SerialPort.so.6
├── libQt6SerialPort.so.6.8.0
├── libQt6Widgets.so
├── libQt6Widgets.so.6
├── libQt6Widgets.so.6.8.0
├── MyApp
└── platforms
└── libqxcb.so
Затем я попытался запустить MyApp следующим образом:
$ export LD_LIBRARY_PATH=$(pwd)
$ echo $LD_LIBRARY_PATH
/home/user/Documents/dist
$ ./MyApp
но это возвращает:
./MyApp: ошибка при загрузке общих библиотек: libQt6Widgets.so.6: не удается открыть общий объектный файл: Нет такого файла или директории
Как видите, файл существует и находится там. После экспорта LD_LIBRARY_PATH
вот вывод ldd
:
$ ldd MyApp
linux-vdso.so.1 (0x00007ffc29796000)
libQt6Widgets.so.6 => не найдено
libQt6Gui.so.6 => не найдено
libQt6SerialPort.so.6 => не найдено
libQt6Core.so.6 => не найдено
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007583d5000000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007583d53ff000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007583d4c00000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007583d5316000)
/lib64/ld-linux-x86-64.so.2 (0x00007583d545a000)
Я прочитал этот и этот вопросы (среди многих других), но у меня все еще есть проблемы. Почему он не находит файлы, даже если они там?
Ответ или решение
Причины, по которым LD_LIBRARY_PATH игнорируется для приложения Qt6
Вы столкнулись с распространенной проблемой при развертывании приложения, разработанного с использованием библиотеки Qt6 на платформе Ubuntu 24.04. Давайте детально рассмотрим причины, по которым LD_LIBRARY_PATH
не подхватывается, и предложим соответствующие решения.
1. Ошибки в настройке переменной окружения
Вы правильно настроили переменную окружения LD_LIBRARY_PATH
, выполнив команду export LD_LIBRARY_PATH=$(pwd)
, что указывает на текущую директорию. Тем не менее, важно проверить:
- Правильность установки переменной: Убедитесь, что переменная действительно установлена в текущей сессии терминала, и что директория
$(pwd)
соответствует местоположению ваших библиотек. - Кодовые страницы и символы: Убедитесь, что в пути к библиотекам отсутствуют лишние символы или пробелы.
Вы можете использовать следующую команду, чтобы сделать вывод более информативным:
echo $LD_LIBRARY_PATH
2. Тип библиотеки
Убедитесь, что все необходимые файлы имеют правильные разрешения и не являются поврежденными. Проверьте, что у вас есть права на чтение для этих файлов с помощью этой команды:
ls -l libQt6*
Если файлы имеют неправильные разрешения, вы можете изменить их с помощью:
chmod +r libQt6*
3. Проблемы с разрешением зависимостей
Ответ команды ldd MyApp
показывает, что зависимости вашего приложения не удалось разрешить. Если библиотека не найдена, это может быть связано с тем, что:
- Имя библиотеки нестандартное: Убедитесь, что вы используете правильные имена библиотек. Для Qt6 правильные имена должны включать полную версию, например:
libQt6Widgets.so.6.8.0
, если это необходимо. - Неправильные ссылки: Убедитесь, что имеете символьные ссылки для библиотек с общими именами (
libQt6Widgets.so.6
и др.). Вы можете создать их вручную, если они отсутствуют:ln -s libQt6Widgets.so.6.8.0 libQt6Widgets.so.6
4. Поддержка платформы
Убедитесь, что ваша платформа поддерживает все необходимые библиотеки. Иногда потребуется дополнительная библиотека, например, для рендеринга GUI. В вашем случае libqxcb.so
также находится в папке platforms
, и необходимо убедиться, что ваш Qt использует её.
5. Зависимости системы
Некоторые зависимости Qt могут не входить в вашу директорию приложений и могут требовать установки через систему управления пакетами. Например, вам может потребоваться установить дополнительные пакеты:
sudo apt install qt6base-dev qt6gui-dev qt6widgets-dev
Заключение
Если, несмотря на все предпринятые шаги, проблема все еще актуальна, попробуйте запустить приложение с использованием strace
:
strace ./MyApp
Это предоставит подробную информацию о том, что пытается сделать приложение и какие ошибки возникают при загрузке.
Следуя этим рекомендациям, вы сможете устранить проблемы с загрузкой библиотек и успешно развернуть ваше приложение Qt6 на Ubuntu 24.04. Не забудьте проверить обновления библиотеки Qt и дальнейшую поддерживаемость в вашей системе.