同步操作将从 初雨团队/VC-LTL 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
我愿化成一座做石桥,经受五百年的风吹,五百年的日晒,五百年的雨打,只求她从桥上走过!
VC-LTL是一个基于微软VC修改的开源运行时,有效减少应用程序体积并摆脱微软运行时DLL,比如msvcr120.dll、api-ms-win-crt-time-l1-1-0.dll等依赖。
VC-LTL最初是Dism++专用运行时。2017年3月6号从Dism++源代码中分离,并正式对外开源,为社区贡献自己的微薄之力。
在大型项目中往往有众多模块,如果都采用静态编译那么造成的空间浪费先不说,最后也会因为Fls上限
导致程序无法正常运行。
而VC-LTL能让你的项目如同系统文件一样共享系统内置msvcrt.dll
,有效的解决Fls上限
以及运行时部署问题
,同时大大缩减程序体积
,可以说一箭三雕!
所有人都可以无条件、免费使用,包括用于商业环境。当然如果大家在自己的程序说明文件中声明使用了VC-LTL那就更好了。
使用VC-LTL后可以将程序动态链接到系统自带的msvcrt.dll中,来减少程序体积。目前使用CRT以及STL的工程一般都可以使用。但是MFC工程不能使用,因为MFC类库太复杂了,尚未适配。
使用VC-LTL,C++程序体积大约缩减30%,而纯C程序则大约缩减50%。
让我们一起跟VS 2008说拜拜!
此表展示了VC-LTL,C/C++库函数覆盖率,通过覆盖情况,可以大致了解VC-LTL的完善程度。
模块 | XP模式 | Vista模式 | UCRT模式 | 相关文件 |
---|---|---|---|---|
CRT | 94.716% | 96.347% | 100% | vcruntime.lib、libvcruntime.lib、msvcrt.lib、msvcmrt.lib、msvcrt_Platform.lib、libucrt.lib、ucrt.lib、libucrt_shared.lib、vc.lib |
STL | 100% | 100% | 100% | libcpmt.lib、msvcprt.lib |
ConcRT | 100% | 100% | 100% | libconcrt.lib、concrt.lib |
WinRT | X | 100% | X | vccorlib.lib(仅支持Windows 8.1以及更高版本) |
ATL | 100% | 100% | 100% | - |
MFC | X | X | 100% | - |
AMP | X | X | X | - |
OpenMP | 100% | 100% | 100% | Visual Studio自身提供,需要带上vcomp140.dll
|
编译工具 | 支持文件 |
---|---|
Visual Studio | VC-LTL helper for Visual Studio.props |
CMake | VC-LTL helper for cmake.cmake |
NMake、CL | VC-LTL helper for nmake.cmd |
QMake | VC-LTL helper for qmake.pri |
操作系统 | 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 | √ | √ | √ | √ |
采用VC-LTL编译后的程序能兼容Windows XP RTM以上所有操作系统,无需安装任何SP补丁包。
下面我们将进入主题,我们给大家准备了丰富的VC-LTL示例供大家参考,也欢迎加入我们的QQ群(633710173)。
假如,你将VC-LTL Binary下载并解压至D:\Src\VC-LTL
(具体位置无任何要求),双击D:\Src\VC-LTL\Install.cmd
即可。
脚本会在
HKCU\Code\VC-LTL
创建注册表。
将属性表VC-LTL helper for Visual Studio.props
复制到你的工程目录,你可以打开属性管理器(视图 - 属性管理器),然后Release配置上右键添加现有属性表
,然后选择VC-LTL helper for Visual Studio.props
即可。
如需支持XP,请在平台工具集中选择
Windows XP
或者修改VC-LTL helper for Visual Studio.props
启用<SupportWinXP>true</SupportWinXP>
即可。
将模块文件VC-LTL helper for cmake.cmake
复制到你的工程目录(顶层CMakeLists.txt同级目录)。然后在CMakeLists.txt
中添加一行 include("VC-LTL helper for cmake.cmake")
即可。
示例:
cmake_minimum_required(VERSION 3.5.2)
project(ltltest)
include("VC-LTL helper for cmake.cmake")
add_subdirectory(src)
务必确保使用
/MT
编译代码。如需支持XP,请修改VC-LTL helper for cmake.cmake
启用set(SupportWinXP "true")
即可。
将辅助脚本VC-LTL helper for nmake.cmd
复制到你的工程目录。启动vcvars32.bat/vcvars64.bat
执行此脚本即可,脚本将自动修改include
以及lib
环境变量。
示例:
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
务必确保使用
/MT
编译代码。如需支持XP,请修改VC-LTL helper for nmake.cmd
启用set SupportWinXP=true
。
现在是不是体积就小了很多。如果你编译不通过,可以先参考 4. 常见问题。如果还是不通过可以反馈,共同改进VC-LTL。
如果正确引用VC-LTL,那么 会在生成时输出:note: 进入ltl普通模式,已准备引用到VC-LTL。定义 _DISABLE_DEPRECATE_LTL_MESSAGE 可关闭信息提示。
。
使用VC-LTL编译时必须采用
/MT
编译,并且所有依赖的静态库也必须使用VC-LTL重新编译。
未正确引用VC-LTL。建议看看生成日志,是否包含:note: 进入ltl普通模式,已准备引用到VC-LTL。定义 _DISABLE_DEPRECATE_LTL_MESSAGE 可关闭信息提示。
。
1:请务必确保 VC-LTL helper for Visual Studio.props
已经添加到工程。
2:确保以下设置正确:
没有正确引入vc.lib、msvcrt_Platform.lib。
引入了没有使用VC-LTL编译的静态lib文件。
使用VC-LTL重新编译对应的静态lib(具体lib名称错误日志会给出)。
_CRT_STDIO_SIZE_MAX
宏。(4.0.2.5 Advanced模式已经修正此问题)%ll
。当你需要兼容XP时,请优先考虑使用%I64
代替。(4.0.2.5 Advanced模式已经修正此问题)setlocale/_create_locale
相关函数不支持UCRT的locale name,使用时必须按VC 2008规范使用,比如 setlocale(0, "chs");
这样调用,而不是传入 setlocale(0, "zh-CN");
。/d2FH4
VS2019新增功能)实现过程中使用了TLS,因此在兼容“Windows XP(2003) x64”时请务必确保不要在DllMain中使用FH4 catch,否则将导致dll直接加载失败。项目 | 备注 |
---|---|
NSudo | 一个强大的系统管理工具。VC-LTL的帮助下减少30%的程序体积,包括NSudo for arm64。 |
Menu98 | 经典样式可自定义的开始按钮右键菜单。使用VC-LTL移除运行时依赖。 |
壁虎浏览器 | 一款专业解决DNS劫持的浏览器。使用VC-LTL有效减少程序体积,减少安装包大小。 |
librech551 | 开源跨平台的CH55x ISP软件。使用VC-LTL移除运行时依赖。 |
Dism++ | Dism GUI版。初雨团队自身项目,使用VC-LTL有效减少程序体积,减少安装包大小。 |
360安全卫士 | 奇虎360推出的上网安全软件。360EvtMgr.exe、360leakfixer.exe、360Util.dll、leakrepair.dll等文件使用VC-LTL编译,在VC-LTL的支持下:升级新编译器,减少文件尺寸,完美兼容WinXP,一箭三雕。 |
*_p
系列函数定义,以免使用*_p
系列函数时编译不通过。_except_handler4_common
(感谢 HwangBae)。__argc
、__argv
、__wargv
、_environ
、_wenviron
全局变量问题(感谢 亮叔叔)。_difftime64
时Windows XP无法运行。_msvcrt.cpp
始终会引入urct_14393.lib问题(感谢 亮叔叔)。本次更新后,FastCopy、winpck相关程序直接可以使用VC-LTL编译。
16299已经发布,因此移除老版本14393支持。相关项目请迁徙到15063或者最新16299。
_fstat32
、_fstat32i64
、_fstat64i32
、_stat32
、_stat32i64
、_stat64i32
、_wstat32
、_wstat32i64
、_wstat64i32
导致编译不通过问题。__acrt_iob_func
始终返回输入流问题。_daylight
,_dstbias
,_timezone
,_tzname
无法使用问题(感谢 sonyps5201314)。_libm_sse2_tan_precise
,_libm_sse2_sqrt_precise
,_libm_sse2_sin_precise
(感谢 stsm85)。_configthreadlocale
、_get_current_locale
、_create_locale
、_free_locale
接口支持。_time32
、_fseeki64
静态实现。_getpid
、_sys_nerr
、_sys_errlist
无法使用问题(感谢 HwangBae)。本次更新主要添加对Vistual Studio 2017 15.5以及更高版本新增的C++ 17功能支持。
__crtLCMapString
相关字符串操作兼容性问题(感谢 Too Simple)。_getptd_noexit
在获取msvcrt.dl的DllMain中创建的 ptd结构时会返回失败问题(感谢 亮亮)。_set_abort_behavior
输出警告问题(感谢 myfreeer)。__p__*
系列函数问题(感谢 昌平)。VC-LTL本次从仓库中剔除了lib文件,VC-LTL用户请下载VC-LTL Binary,然后再使用VC-LTL编译代码。
__p__fmode
(感谢 augustheart)。全新的VC-LTL 4.0,代号——“破晓”,作为大版本升级某些行为已经更改:
- VC-LTL 4.0 开始,如需静态编译(仅依赖msvcrt.dll)请使用
/MT
编译。- VC-LTL 4.0 不兼容VC-LTL 3.X编译的静态库,你需要使用VC-LTL 4.0(破晓)重新编译。
/MD
编译即可链接到 ucrtbase_ltl.dll 等DLL。quick_exit
、__stdio_common
等功能。所需的最低版本
。_libm_sse2_tan_precise
相关符号问题(感谢 13732650)。_byteswap_ulong
、_byteswap_uint64
、_byteswap_ushort
(感谢 wangwenx190)。_abs64
、_rotl64
以及_rotr64
函数的入口点。wcstold
、_wcstof_l
、_wcstod_l
、_wcstold_l
、_strtod_l
(xp)以及_strftime_l
(Vista)。_Atexit
函数依赖EncodePointer
问题(感谢 亮亮)。EncodePointer
问题。_initialize_onexit_table_downlevel
一处内存泄漏问题(感谢 g-qa-ck组)。operator new(size_t,int,char const *,int)
、operator new[](size_t,int,char const *,int)
入口点(感谢 希望)。delete[](void *, std::nothrow_t const &)
(感谢 Too Simple)。_IsExceptionObjectToBeDestroyed、_CreateFrameInfo、_FindAndUnlinkFrame
(感谢 夏思畅)。pplerror.cpp
问题(感谢 xspeed1989 )。VC-LTL helper for qmake.pri
脚本,改进对QMake的支持(感谢 漆黑の牙)。advapi32.lib
,可能导致ImpersonateSelf
等符号无法解析(感谢 昌平517)。_downlevel
后缀删除(感谢 过客)。VC-LTL helper for qmake.pri
脚本添加老版本QMake兼容(感谢 大胸滴)。_ATL_XP_TARGETING
以及_USING_V110_SDK71_
宏从错误降级到警告。__wcsrtombs_utf8
符号问题(感谢 水边)。_splitpath_s、_wsplitpath_s
文件名为空问题(感谢 水边)。_CRT_STDIO_ISO_WIDE_SPECIFIERS
宏以及 legacy_stdio_definitions.lib
支持(感谢 大胸)。_initialize_invalid_parameter_handler
、_initialize_denormal_control
、_get_startup_thread_locale_mode(仅Vista模式)
支持。_atoi_l、_strtol_l、_atoflt_l、_atoldbl_l
等支持。_create_locale、_wcreate_locale、_get_current_locale
支持。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。