![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
SABROG |
![]() ![]()
Сообщение
#1
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Я почему-то всегда думал, что переменная окружения 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 и поэтому остановился на таком варианте:
|
|
|
![]() |
SABROG |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Да этот configure злой вообще, вот метод из configureapp.cpp:
Т.е. он максимум что учитывает это винда это или не винда. Особенно стоит обратить внимание на ".lib", в этом методе сделано всё для MSVC и совершенно не учитываются особенности MinGW, т.е. ".a" библиотек как будто не существует. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 18.2.2025, 7:08 |