Есть кроссплатформенная программа заказчика под Window/OsX/Linux - C++/Qt/Qml. С линуксами возникает проблема линковки Qt с openssl. Если компилирую программу на LinuxMint, то на Debian при запуске программа ругается на несовместимую версию openssl. На Ubuntu проблем не возникает. При этом, напрямую openssl в программе не используется. Если не ошибаюсь, только QNetworkAccessManager. То есть, openssl используется опосредственно через Qt либы.
Какие есть варианты решения этой проблемы? Есть ли возможность собирать один бинарник для Mint, Ubuntu и Debian?
По-умолчанию Qt динамически загружает openssl либы из системы. Но при сборке самой Qt используется конкретная либа openssl, которая может быть несовместима с openssl на целевой системе. Debian использует более свежие либы, чем Mint и Ubuntu. Как это разрулить - не понятно.
Если программа устанавливается в отдельную папку (как многие делают в /opt/) есть такой вариант.
1 LD_LIBRARY_PATHСкопируй нужную версию libcrypto и libssl в папку с программой и сделай симлинки на libcrypto.so.1.1, libssl.so.1.1 и на libcrypto.so.1.0.0 .
Это поломает системный линковщик и все запустится хорошо.
Есть ещё моменты с glibc. Для запуска на старых дистрах понадобится сборка под manylinux.
Более аккуратный способ, который используют многие проприетарщики.
Также скидываем нужные библиотеки в папку с приложением и делаем обертку для запуска.
#!/bin/bash
LD_PRELOAD=./libcrypto.so ./my-programm
3 И если проект не большой, то линкуйте статический файл.
Сделать свой набор библиотек с которыми вы будете деплоить приложение. Это не единственные грабли на которые вы наступите пытаясь пользоватся системными библиотеками.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости