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