Переменные LIB и LIBRARY_PATH |
Здравствуйте, гость ( Вход | Регистрация )
Переменные LIB и LIBRARY_PATH |
SABROG |
23.1.2010, 13:33
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Я почему-то всегда думал, что переменная окружения LIB также действует и для g++/MinGW. Однако сегодня обнаружил, что это не так. А выяснил я это следующим образом. Обычно у меня есть заранее подготовленный файл типа build_qt.bat, где прописаны все переменные окружения и параметры для configure, чтобы собрать Qt. Я решил собрать Qt на работе, но мне нужны были ресурсы компьютера и я поэтому выполнил только configure без сборки всей библиотеки. Сегодня я решил уже дособрать Qt и с удивлением обнаружил, что не линкуются библиотеки OpenSSL. Как я только не изгалялся над переменной LIB, чтобы линкер его увидел ничего не помогало. Решил погуглить и выяснил, что оказывается для MinGW/g++ используется переменная LIBRARY_PATH, а не LIB. Когда я задал эту переменную, то всё пошло собираться дальше, что не могло не обрадовать. Однако в голове появилась правильная мысль: почему на системе где стоят библиотеки MSXML и глобально прописана переменная LIB с путем до этой самой мелкософтовской библиотеки Qt линковаться отказывается. И тут до меня дошло, что configure Qt насильно выдирает путь из переменной LIB, которую подставляет в линкер через параметр -L"" и это при том, что он явно знает каким компилятором он будет собирать библиотеку. Отсюда получается, что в configure есть баг/недоработка, т.к. он не учитывает, что переменная LIB и INCLUDE никаким образом не относятся к компилятору g++/MinGW, а относятся только к компилятору Microsoft. С MinGW вместо этих двух переменных нужно использовать переменные LIBRARY_PATH для указания пути, где лежат файлы библиотек (.a), а для инклудов/хедеров/заголовков (.h, .hpp) нужно использовать CPLUS_INCLUDE_PATH.
Сначала я хотел убрать любое упоминание о LIB и INCLUDE из своих командных файлов с окружением для MinGW, а потом понял, что это не излечит "багу" qt и поэтому остановился на таком варианте:
|
|
|
Litkevich Yuriy |
23.1.2010, 15:17
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
как-то мне вообще в голову не приходило, что компиллери конфигуратор могут смотреть переменные окружения, кроме PATH и HOME
|
|
|
SABROG |
23.1.2010, 16:04
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Да этот configure злой вообще, вот метод из configureapp.cpp:
Т.е. он максимум что учитывает это винда это или не винда. Особенно стоит обратить внимание на ".lib", в этом методе сделано всё для MSVC и совершенно не учитываются особенности MinGW, т.е. ".a" библиотек как будто не существует. |
|
|
Litkevich Yuriy |
23.1.2010, 16:17
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
23.1.2010, 18:12
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Написал, только теперь меня мучают сомнения. Все-таки в коде идет проверка на расширение файла ".lib" и только в этом случае берется путь из LIB. То, что INCLUDE берется для всех .h файлов конечно не правильно. Однако INCLUDE вроде бы не влияло на сборку. Я похоже что-то упустил...
|
|
|
Litkevich Yuriy |
23.1.2010, 19:36
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
25.1.2010, 22:34
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Объяснения не написали. Thiago отrejectил и только такой коммент оставил:
Цитата Please clean up your environment. Never mix different compiler settings. The contents of INCLUDE and LIB are used to tell Qt where to find headers and libraries. Вольный перевод такой: пожалуйста очистите ваше окружение (вероятно он о друзьях и родных ) Никогда не смешивайте настройки разных компиляторов. Содержимое INCLUDE и LIB используется чтобы сказать Qt где искать заголовки и библиотеки. Собственно с чего начали к тому и вернулись:
Пойду ему ответ оставлю, что они сами миксуют эти settings ибо INCLUDE и LIB используются совместно и Qt и MSVC. |
|
|
Текстовая версия | Сейчас: 28.1.2025, 10:28 |