# VC-LTL - An elegant way to compile lighter binaries.
I would like to turn into a stone bridge, go through 500 years of wind, 500 years of Sun, rain for 500 years, but she walked off a bridge!
VC-LTL is an open source CRT library based on the MS VCRT that reduce program binary size and say goodbye to Microsoft runtime DLLs, such as msvcr120.dll, api-ms-win-crt-time-l1-1-0.dll and other dependencies.
VC-LTL was originally a dedicated Dism++ runtime and was isolated and open sourced from Dism++ source code on Mar 6, 2017.
There are plenty of modules in large projects. If all binaries uses static compilation, it will use plenty of disk space and finally may crashed because of the fiber local storage (FLS) limitation.
But the VC-LTL can make your project using the built-in msvcrt.dll
in the
Windows. It solves the C runtime deployment problem and the fiber local storage
(FLS) limitation problem effectively, and greatly reduce the binaries size.
What a handy library!
Everyone can use it for free, even for the commerical use. Of course, I hope that if you mentioned the VC-LTL in your project, because I want to help more people.
After using the VC-LTL, the binaries will be dynamically linked to the built-in
msvcrt.dll
or ucrtbase.dll
in the Windows to reduce the binaries size. It is generally
available if you use the VC-LTL in the project using the C Runtime, STL or MFC.
After using the VC-LTL, the size of the binaries will reduce about 30% if compiled from the C++ source code, and about 50% if compiled from the pure C source code.
Let's say goodbye to the Visual Studio 2008.
Module | 5.1.2600.0/5.2.3790.0 | 6.0.6000.0 | 6.2.9200.0 | 10.0.10240.0 | Files |
---|---|---|---|---|---|
depends | msvcrt.dll | msvcrt.dll | msvcrt.dll | ucrtbase.dll | |
VCRT | 100% | 100% | 100% | 100% | vcruntime[d].lib、libvcruntime[d].lib |
UCRT | 97.458% | 97.676% | 97.676% | 100% | libucrt[d].lib、ucrt[d].lib |
WinRT | X | X | 99.609% | 100% | vccorlib.lib (Windows 8.1 or later) |
STL | 100% | 100% | 100% | 100% | |
ConcRT | 100% | 100% | 100% | 100% | |
ATL | 100% | 100% | 100% | 100% | |
MFC | 100% | 100% | 100% | 100% | |
AMP | X | X | X | 100% | Requires vcamp140.dll from the Visual C++ Runtime |
OpenMP | 100% | 100% | 100% | 100% | Requires vcomp140.dll from the Visual C++ Runtime |
Starting from VC-LTL 5.0, ABI is compatible
with Microsoft. You can link use the static library with VC-LTL without recompiling!
In addition, in order to provide consistency in behavior, a Debug version of the library is also provided. It will still use msvcrt.dll or ucrtbase.dll, but it does not support the heap debugging functions. If you need to use the heap debugging, please disable VC-LTL.
Build Tool | Helper |
---|---|
Visual Studio | NuGet or VC-LTL helper for Visual Studio.props |
CMake | VC-LTL helper for cmake.cmake |
NMake, CL | VC-LTL helper for nmake.cmd/VC-LTL helper for nmake.ps1 |
QMake | VC-LTL helper for qmake.pri |
Rust | crate |
OS | x86 | x64 | arm | arm64 |
---|---|---|---|---|
Windows XP, Windows Server 2003 | √ | √ | - | - |
Windows Vista, Windows Server 2008 | √ | √ | - | - |
Windows 7, Windows Server 2008 R2 | √ | √ | - | - |
Windows 8, Windows Server 2012, Windows RT | √ | √ | √ | - |
Windows 8.1, Windows Server 2012 R2, Windows RT 8.1 | √ | √ | √ | - |
Windows 10, Windows Server 2016, Windows Server 2019 | √ | √ | √ | √ |
Windows 11 | √ | √ | √ | √ |
Tips: If you need to compile Windows XP compatible app (5.1.2600.0/5.2.3790.0), please don't forget to used YY-Thunks.
The binaries compiled with the VC-LTL is compatible with Windows XP and later, even in the environment which installed no hotfixes.
We will enter the theme, we have prepared a rich VC-LTL Samples for your reference, and welcome to join our QQ group (633710173).
Right-click on the project and select "Manage NuGet Packages", then search for VC-LTL
and choose the version that suits you, and finally click Install.
If you download and unzip VC-LTL Binary to D:\Src\VC-LTL
, please double-click D:\Src\VC-LTL\Install.cmd
.
The script will save the information in the registry
HKCU\Code\VC-LTL
.
Copy VC-LTL helper for Visual Studio.props
to your project, then open the Property Manager ( View - Property Manager ) and right-click on the Release Configuration, click on Add Existing Property Sheet...
, and finally select VC-LTL helper for Visual Studio.props
.
Runtime Library
adjust to Multi-threaded (/MT)
For XP support, please Right click on the project, Properties - NuGet Packages Settings - VC-LTL - Target CRT version - "msvcrt 5.1.2600.0". In addition, it is recommended that you install YY-Thunks.
If you download and unzip VC-LTL Binary to D:\Src\VC-LTL
, please double-click D:\Src\VC-LTL\Install.cmd
.
The script will save the information in the registry
HKCU\Code\VC-LTL
.
Copy VC-LTL helper for cmake.cmake
to your project. Then add include("VC-LTL helper for cmake.cmake")
to CMakeLists.txt
.
Example:
cmake_minimum_required(VERSION 3.5.2)
project(ltltest)
include("VC-LTL helper for cmake.cmake")
add_subdirectory(src)
It's recommended to use
/MT
to compile the project when using VC-LTL. For XP support, please modifyVC-LTL helper for cmake.cmake
to enableset(WindowsTargetPlatformMinVersion "5.1.2600.0")
. In addition, it is recommended that you install YY-Thunks.
If you download and unzip VC-LTL Binary to D:\Src\VC-LTL
, please double-click D:\Src\VC-LTL\Install.cmd
.
The script will save the information in the registry
HKCU\Code\VC-LTL
.
Copy VC-LTL helper for nmake.cmd
to your project. Run vcvars32.bat
or vcvars64.bat
and execute this script. The script will automatically modify the include
and lib
environment variables.
Example: cmd
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
call "D:\VC-LTL\VC-LTL helper for nmake.cmd"
nmake /f Test.mak
Example: powershell
$BuiltInVsWhereExe = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$LatestVisualStudioRoot = & $BuiltInVsWhereExe -latest -prerelease -property installationPath
# x86、amd64、arm、arm64
& "$LatestVisualStudioRoot\Common7\Tools\Launch-VsDevShell.ps1" -arch x86
& D:\VC-LTL\VC-LTL helper for nmake.ps1"
& nmake /f Test.mak
It's recommended to use
/MT
to compile the project when using VC-LTL. For XP support, please modifyVC-LTL helper for nmake.cmd
to enableset WindowsTargetPlatformMinVersion=5.1.2600.0
. In addition, it is recommended that you install YY-Thunks.
Is the file size smaller? If you fail to compile, please refer to 4. FAQ. You can also feedback and work together to improve VC-LTL.
It is recommended to use
/MT
to compile when compiling with VC-LTL 5.0, and the dependent static libraries does not need to be recompiled.
未正确引用VC-LTL。建议看看链接日志,是否链接了VC-LTL的lib。
1:请务必确保 VC-LTL helper for Visual Studio.props
已经添加到工程。
2:确保以下设置正确:
.utf8