crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Переменные 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 и поэтому остановился на таком варианте:

set LIB=
set INCLUDE-
set LIBRARY_PATH=c:\path\to\openssl\for\example
set CPLUS_INCLUDE_PATH=c:\path\to\openssl\include\for\example
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
SABROG
  опции профиля:
сообщение 25.1.2010, 22:34
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 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 где искать заголовки и библиотеки.

Собственно с чего начали к тому и вернулись:

set LIB=
set INCLUDE=


Пойду ему ответ оставлю, что они сами миксуют эти settings ибо INCLUDE и LIB используются совместно и Qt и MSVC.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 13:30