Z37
@Z37

Почему программа не работает вне Qt Creator?

Для работы програмы нужны две внешние библиотеки, которые я добавил через gui так :
unix:!macx: LIBS += -L$$PWD/curl/ -lcurl

INCLUDEPATH += $$PWD/curl
DEPENDPATH += $$PWD/curl

unix:!macx: PRE_TARGETDEPS += $$PWD/curl/libcurl.a

unix:!macx: LIBS += -L$$PWD/jansson/ -ljansson

INCLUDEPATH += $$PWD/jansson
DEPENDPATH += $$PWD/jansson

Программа отлично собирается и запускается через IDE, но если я перейду в папку с исполняемым файлом, то получаю при запуске:
$ ./myapp
./myapp: error while loading shared libraries: libjansson.so.4: cannot open shared object file: No such file or directory
  • Вопрос задан
  • 4841 просмотр
Решения вопроса 1
EXL
@EXL
Энтузиаст
Я вижу несколько способов разрешения зависимостей.
Во-первых, можно собрать libcurl и libjansson статически и прилинковать к вашему приложению.
Во-вторых, помимо статических libcurl и libjansson можно собрать сам Qt тоже в статику и прилинковать к вашему приложению. На выходе вы получите исполнительный файл большого размера (размер можно урезать с помощью утилиты upx), который будет запускаться во всех современных дистрибутивах GNU/Linux, где есть иксы.
В-третьих, самый рациональный способ - собрать DEB- или RPM-пакет, в котором в зависимостях прописать пакеты libcurl3(4), libjansson4, и необходимые модули с qt4(5).

Ну а запустить сам бинарь просто. У вас в Qt Creator'е есть переменная окружения LD_LIBRARY_PATH. Просто скопируйте в терминал её значение перед запуском программы:
LD_LIBRARY_PATH="/opt/QtSDKs/Qt5.3.1/5.3/gcc_64/lib:/opt/QtSDKs/Qt5.3.1/5.3/gcc_64/lib:/home/user/projects/jansson/lib:$LD_LIBRARY_PATH" ./my_cool_app


Curl у вас, похоже, собран статически. Попробуйте собрать jansson тоже в статику. Тогда ошибки error while loading shared libraries: libjansson.so.4: cannot open shared object file: No such file or directory вы не получите.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Вероятно, папки с библиотеками, которые вы используются, отсутствуют в путях для поиска разделяемых библиотек.

Если используете linux, то можете попробовать запустить свою программу предварительно добавив к переменной окружения LD_LIBRARY_PATH пути к соответствующим папкам.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы