Russian Qt Forum
Ноябрь 22, 2024, 06:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Бинарник и Библиотеки QT в разные папки  (Прочитано 4259 раз)
phoenixyak
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« : Июнь 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.
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Июнь 15, 2022, 15:34 »

Как вариант, в папке с бинарником создаете файл qt.conf где указываете пути до библиотек.
Записан
phoenixyak
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #2 : Июнь 17, 2022, 09:12 »

qt.conf рядом с exe не помогает.
Я вижу, что
QLibraryInfo::location( QLibraryInfo::LibrariesPath);
QLibraryInfo::location( QLibraryInfo::PluginsPath);
возвращает то, что я установил в конфигурационном файле
только после вызова
QApplication a(argc, argv);

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

Записан
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #3 : Июнь 17, 2022, 09:58 »

Для начала необходимо понять какие dll ты собрался класть. Второе, это какая версия ОС используется. Я сталкивался в свое время, что в win7 и XP располагать dll необходимо было в разных местах.  Нужно больше конкретики. А указание жестких путей это не совсем правильно...
К тому же откуда проверяешь, из под IDE или просто запускаешь?
Записан
phoenixyak
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #4 : Июнь 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();
}

« Последнее редактирование: Июнь 17, 2022, 11:08 от phoenixyak » Записан
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #5 : Июнь 17, 2022, 15:37 »

Мне кажется ты пытаешься сделать не реализуемое.
QtCore и тому подобное должно лежать рядом с exe. Ниразу не видел написанное на Qt без этих библиотек в каталоге запуска. Как можно что-то загрузить, если функция лежит в dll до которой еще добраться необходимо...



Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Июнь 17, 2022, 20:30 »

через символические ссылки попробуй (mklink)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #7 : Июнь 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
Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #8 : Июнь 22, 2022, 11:02 »

Да, при тех условиях, которые хочет автор, самое простое, наверное, - это запускать всё через батничек, в который добавлять строчку с PATH перед вызовом EXE.
Записан

Мои проекты на Qt: DoubleContact, LInvert
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.117 секунд. Запросов: 23.