Есть кроссплатформенная программа заказчика под 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 И если проект не большой, то линкуйте статический файл.
Сделать свой набор библиотек с которыми вы будете деплоить приложение. Это не единственные грабли на которые вы наступите пытаясь пользоватся системными библиотеками.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вопрос такой, есть QScrollArea с некоторым количеством кнопок на нейДля области установлен скролл через QScroller::grabGesture(viewport(), QScroller::TouchGesture); Как сделать,...
Пишу код на ардуино, раз в 1 мс подаю ток на нужный мне пин пусть это делает функция pin()
Добрый деньЯ начинаю осваивать Android Api и хочу вывести строку на экране телефона через консоль ПК, связанные через USB
Всем саламВ приложения для загрузки и вывода изображений использую picasso