LD_LIBRARY_PATH игнорируется для приложения Qt6

Вопрос или проблема

Я пытаюсь развернуть приложение 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 и дальнейшую поддерживаемость в вашей системе.

Оцените материал
Добавить комментарий

Капча загружается...