Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: phoenixyak от Июнь 15, 2022, 10:51



Название: Бинарник и Библиотеки QT в разные папки
Отправлено: phoenixyak от Июнь 15, 2022, 10:51
Как разделить бинарник и библиотеки QT в разные папки?
Есть БИнарник который лежит в out/plugins и QT библиотеки которые расположен в out/QT.
Добавление пути к Библиотекам  QT в переменную среды PATH или перемещение их в SYSTEM 32 не лучшая идея, потому-что может вызвать проблемы с другим ПО, установленном на целевом PC.
Пробовал следующий код:
Код:
int main(int argc, char *argv[])
{
    QStringList s;
    s.append("E:\\develop\\repositories\\rep_sw_new\\trunk\\sw\\QT\\out\\QT\\platforms");
    s.append("E:\\develop\\repositories\\rep_sw_new\\trunk\\sw\\QT\\out\\QT");
    QCoreApplication::setLibraryPaths(s);

    QApplication a(argc, argv);

    Widget w(argc, argv);
    w.show();
    return a.exec();
}

Помогло с qwindows.dll в папке platforms,  но DLL  в папке QT также не видит.

Возможно есть вариант с переопределением переменной среды PATH внутри процесса, п пробовал с qputenv и qgetenv не помогло почему-то.

PS: Приложение будет состоять из многих процессов с иерархией папочек, поэтому есть необходимость явно указать, где будут лежать все DLL QT.


Название: Re: Бинарник и Библиотеки QT в разные папки
Отправлено: PimenS от Июнь 15, 2022, 15:34
Как вариант, в папке с бинарником создаете файл qt.conf где указываете пути до библиотек.


Название: Re: Бинарник и Библиотеки QT в разные папки
Отправлено: phoenixyak от Июнь 17, 2022, 09:12
qt.conf рядом с exe не помогает.
Я вижу, что
QLibraryInfo::location( QLibraryInfo::LibrariesPath);
QLibraryInfo::location( QLibraryInfo::PluginsPath);
возвращает то, что я установил в конфигурационном файле
только после вызова
QApplication a(argc, argv);

Я так понимаю, что  вызов QApplication переопределяет пути поиска, но он сам требуют подключенных DLL QT.
Проблема не решена..



Название: Re: Бинарник и Библиотеки QT в разные папки
Отправлено: demal от Июнь 17, 2022, 09:58
Для начала необходимо понять какие dll ты собрался класть. Второе, это какая версия ОС используется. Я сталкивался в свое время, что в win7 и XP располагать dll необходимо было в разных местах.  Нужно больше конкретики. А указание жестких путей это не совсем правильно...
К тому же откуда проверяешь, из под IDE или просто запускаешь?


Название: Re: Бинарник и Библиотеки QT в разные папки
Отправлено: phoenixyak от Июнь 17, 2022, 11:06
Работаю на Windows 7.
Версия библиотек QT 5.12
Нужно указать путь откуда будут браться Qt5Core.dll и остальные dll.
Собираю все  в релизе. Запуская напрямую -вне QT креатора.

Есть основная программа в папке out
Библиотеки все и папочки скопировал с помощью QT-ной утилиты (назовем это выхлоп утилиты)
1) Если сложить весь выхлоп утилиты в папку рядом с EXE то все работает.

Если переместить выхлоп в папку out/QT
то ругается что не может найти Qt5Core.dll






Если положить qt.conf рядом с exe с содержимым:
[Paths]
Libraries=QT
Plugins=QT

Ошибка повторится.
Правильно ли я понимаю, что мне нужно переопределить только путь Libraries?

ps
код основного приложения такой:
Код:
int main(int argc, char *argv[])
{
//    #ifndef QT_DEBUG
//        QStringList s;
//        s.append(".\\QT\\");
//        QCoreApplication::setLibraryPaths(s);
//    #endif

    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}



Название: Re: Бинарник и Библиотеки QT в разные папки
Отправлено: demal от Июнь 17, 2022, 15:37
Мне кажется ты пытаешься сделать не реализуемое.
QtCore и тому подобное должно лежать рядом с exe. Ниразу не видел написанное на Qt без этих библиотек в каталоге запуска. Как можно что-то загрузить, если функция лежит в dll до которой еще добраться необходимо...





Название: Re: Бинарник и Библиотеки QT в разные папки
Отправлено: kambala от Июнь 17, 2022, 20:30
через символические ссылки попробуй (mklink)


Название: Re: Бинарник и Библиотеки QT в разные папки
Отправлено: ssoft от Июнь 20, 2022, 07:44
Цитировать
Как разделить бинарник и библиотеки QT в разные папки?

Если нет возможности задать всё в системных путях, то лучше скрипт запуска написать, в котором всё определить.

Для Windows что-то типа того

Код:
set MINGW_DIR=%CD%\3rdparty\mingw-7.3.0
set QT_DIR=%CD%\3rdparty\qt-5.12.6
set PATH=%MINGW_DIR%\bin;%QT_DIR%\bin;%QT_DIR%\plugins;%PATH%
cd "рабочая директория"
start "" "запускаемый бинарник" "параметры запуска"
exit 0


Название: Re: Бинарник и Библиотеки QT в разные папки
Отправлено: DarkHobbit от Июнь 22, 2022, 11:02
Да, при тех условиях, которые хочет автор, самое простое, наверное, - это запускать всё через батничек, в который добавлять строчку с PATH перед вызовом EXE.