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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt и ее месторасположение на hdd пользователя.  (Прочитано 4606 раз)
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:   :!:  :!:  :!:  :!:
Записан
DenKor
Гость
« Ответ #1 : Сентябрь 15, 2005, 12:58 »

Значение переменных до и после переноса укажи

QMAKESPEC
QTDIR
 
В библиотеках да пути прописаны.
Но по умолчанию динамические библиотеки ищутся в текущей директории. Так что они используются   только если библиотек там нет.
Записан
SLiDER
Гость
« Ответ #2 : Сентябрь 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. Не фига не выйдет.  Грустный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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