В чем разница между переменными среды 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пути переменных окружения, как если бы они добавлялись к пути (который не следует просто называть переопределением).

Другие вопросы по тегам