C++ 库打包的运行时兼容性
我想将库打包为NuGet本机包。这个问题并不特定于打包的lib/dll/pdb/includes的分发方式;但具体地说,我正在看(我希望有更好的链接),我得到了一个印象,有太多不同的构建目标,通过组合获得。我试图提出一个或多或少最小的目标集,供依赖于包的应用程序使用。构建目标主要有以下正交轴:C++ 库打包的运行时兼容性,c++,visual-studio,compatibility,nuget-package,msvcrt,C++,Visual Studio,Compatibility,Nuget Package,Msvcrt,我想将库打包为NuGet本机包。这个问题并不特定于打包的lib/dll/pdb/includes的分发方式;但具体地说,我正在看(我希望有更好的链接),我得到了一个印象,有太多不同的构建目标,通过组合获得。我试图提出一个或多或少最小的目标集,供依赖于包的应用程序使用。构建目标主要有以下正交轴: 32位对64位。显然,这是合法的 动态与静态构建。这也是合理的 调试与发布版本。这也很有意义,因为调试构建引用调试运行时(libcmtd.lib或msvcdrtd.lib),而发布构建引用静态运行时(li
libcmtd.lib
或msvcdrtd.lib
),而发布构建引用静态运行时(libcmtd.lib
或msvcdrtd.lib
)。为了避免默认库冲突,包含这些内容是有意义的\u cdecl
vs\u stdcall
vs\uu fastcall
vs\uu thiscall
。我认为这没有什么意义。无论其他链接库如何,此特定库都支持调用约定。此外,变量参数仅适用于Win32中的\u cdecl
,并且还支持64位调用约定。我的理解是,只要头文件声明与平台兼容的调用约定,我选择的任何内容都可以。在任何情况下,都不会为不同的调用约定提供Microsoft运行时库v100
(v10.0,VS 2010)到vs140
(v14.0,VS 2015)。我的主要问题是,运行库在不同的Visual C++库之间兼容如何?这里的问题是我们也使用其他工具集(英特尔C++是一个例子),这些通常在COAPP中没有对应的包装案例,而与微软运行时兼容。
我希望避免为特定的工具集打包。如果代码使用最旧的vesrion编译,并且不使用任何更新的运行时函数(例如,v110是受支持的最低版本),那么这有多可能?我在这里主要担心两件事(对不起,另一个编号列表从这里开始):
libcmt[d].lib
)std
异常在编译器的版本链上下兼容,前提是我在启用RTTI的情况下编译库李>
更一般地说,是否有Microsoft提供的运行时兼容性矩阵
如果还有其他编号的列表点,我也想听听