Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: SLiDER от Сентябрь 15, 2005, 00:00



Название: Qt и ее месторасположение на hdd пользователя.
Отправлено: SLiDER от Сентябрь 15, 2005, 00:00
Вчера компилировал OS версию четвертой Qt. На диске где она в последствии должна была стоять не хватало места (при компиляции требует примерно 1,5 Гб), поэтому решил компилировать на другом диске, а потом перенести на положенное место. Скомпилировал. Перенес. Прописал все пути и переменные (QTDIR и QMAKESPEC). Перелогинился. Для теста создал маленький файлик, типа "Hello, World". Набрал в консоли qmake -poject. Получил файл проекта. Набрал qmake имя файла проекта. И получил ... вот такую вот фигню :
Код:
Could not find mkspecs for your QMAKESPEC after trying:
        G:\temp\qt-os-4.0.1\mkspecs
Error processing project file: qt_test.pro

Из  ответа стало понятно, что qmake, каким то образом, запомнил директорию, в которой компилировался. Я начал выяснять как это ему удалось. И выяснил. Все ссылки на свое месторасположение на компьютере пользователя Qt забила в себя в виде констант на этапе компиляции, и плевать хотела на переменную окружения QTDIR. Причем, это касается не только qmake-а, но и следующих динамических библиотек : QtCore4.dll, QtCore4.dll, QtDesigner4.dll. Это легко проверить, если открыть любой из этих файлов каким либо редактором (хоть блокнотом) и поискать в нем строку с путем к директории в которой компилировалась или куда устанавливалась (в случае работы инсталятора) Qt. Проверил и более ранние версии (в том числе и коммерческие). Таже фигня. Это я чего то не понимаю или эта такая ФИЧА, и типа это круто. Объясните мне кто нибудь. ПОЖАЛУЙСТА !!!  :shock:   :!:  :!:  :!:  :!:


Название: Qt и ее месторасположение на hdd пользователя.
Отправлено: DenKor от Сентябрь 15, 2005, 12:58
Значение переменных до и после переноса укажи

QMAKESPEC
QTDIR
 
В библиотеках да пути прописаны.
Но по умолчанию динамические библиотеки ищутся в текущей директории. Так что они используются   только если библиотек там нет.


Название: Qt и ее месторасположение на hdd пользователя.
Отправлено: SLiDER от Сентябрь 15, 2005, 20:23
Вы меня похоже не поняли. Проблема совсем не в динамических библиотеках, так как ваша программа ищет их не по переменной QTDIR, а по путям записанных в переменной PATH, хотя, это (абсолютные пути в виде констант в dll) тоже, согласитесь, весьма странно. Проблема в том, что qmake ищет mkspecs директорию по путям, что в нем зашиты при компиляции, и плевать хотел на переменную QTDIR. Тоесть, похоже, существует только два пути боротся с этим идиотизмом. Вопервых, перекомпилить библиотеку заново в нужной директории (это что то около 2 часов), или патчить бинарник. Я его смотрел, там (в бинарнике) эти пути как специально распологаются в окружении сплошных нолей, т.е. скорее всего это не меряные символьные массивы специально подготовленные для произвольной длинны пути. То-то мне сразу не понравились надписи, которые выводил eval-инсталятор в конце установки. Что то вроде "Патчу такую то dll".
Неужели нет ни какого цивилизованного способа поборотся с этим.

 :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:  :evil:

З.Ы. Кстати, эту фичу может проверить каждый, измените название директории qt, поправте соответствующие переменные окружения и попробуйте запустить qmake. Не фига не выйдет.  :(