В чем разница между переменными среды LIB и LIBPATH для MS Visual C/C++?
Я работал над некоторыми сценариями сборки, и это меня беспокоит. Я хочу быть уверен, что мы не зависимы от настроек среды, но чтобы быть уверенным в этом, я чувствую необходимость понять, как / где настройки используются инструментами.
В командной строке Visual Studio и / или в файле vcvarsall.bat установлены две различные переменные среды: LIB и LIBPATH. Значения разные, но частично совпадают. Вот значения из моей системы:
LIB=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86;
LIBPATH=C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\Windows\Microsoft.NET\Framework\v3.5;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral;\Microsoft.VCLibs\11.0\References\CommonConfiguration\neutral;
Я просто хотел бы понять обоснование наличия двух разных переменных - немного больше, чем очевидный факт, что LIBPATH приносит больше библиотек. Я попытался найти его, но не нашел четкого определения того, когда каждый из них используется компоновщиком и / или средой разработки.
2 ответа
LIB
для компоновщика, помогает найти импортные и статические библиотеки.
LIBPATH
для компилятора, помогает найти файлы метаданных. Как библиотеки типов, сборки.NET, файлы WinRT .winmd.
Переменная среды передается компоновщику и помогает ему найти и импортироватьфайлы.
И это, независимо от того,
.lib
файл принадлежит динамической или статической библиотеке.
Переменная окружения передается компилятору и помогает ему найти файлы метаданных .
Например, сборки .NET, библиотеки типов или WinMD-файлы WinRT.
Также обратите внимание, что
/LIBPATH
параметр командной строки не имеет ничего общего с
LIBPATH
переменная среды, и она просто ошибочно названа (Microsoft).
И путь, переданный с использованием указанного параметра командной строки, просто ищется перед
LIB
пути переменных окружения, как если бы они добавлялись к пути (который не следует просто называть переопределением).