What is the difference between the LIB and LIBPATH environment variables for MS Visual C/C++?

Viewed 20253

I've been working on some build scripts, and this is bugging me. I want to be sure that we're independent of environment settings, but in order to be sure of that I feel a need to understand how/where the settings are used by the tools.

The Visual Studio command prompt and/or vcvarsall.bat file set up two distinct environment variables: LIB and LIBPATH. The values are different, but partially overlapping. Here are the values from my system:

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;

I'd just like to understand the rationale for having two different variables -- a little more than the obvious fact that LIBPATH brings in more libs. I've tried looking it up, but I haven't found a clear definition of when each is used by the linker and/or the dev environment.

2 Answers

The LIB environment-variable is passed to the linker, and helps it to find and import .lib files.

And that, no matter if .lib file belongs to dynamic or static library.

The LIBPATHenvironment-variable is passed to the compiler, and helps it to find meta-data files.

Like .NET assemblies, type libraries, or WinRT .winmd files.

Also note that, the /LIBPATH command-line option has nothing to do with LIBPATH environment variable, and is just misleadingly named (by Microsoft).

And the path passed using said command-line option, is just searched before LIB environment-variable's paths, like it's prepending a path (which one should not simply call overriding).

Related