Vik*_*tor 9 c++ crt msvcrt static-linking visual-c++
请考虑以下情形:应用程序链接到第三方库A.
A使用MSVC 2008构建,并且静态链接(即使用/ MT构建)到C运行时库v9.0.
该应用程序使用MSVC 2005构建,并静态链接到A和(使用/ MT)到C运行时库v8.0.
我可以看到这个问题 - 例如,如果在运行时库版本之间的标题中更改了类型.
是否注意使运行时库头在版本之间保持兼容,或者是否应始终确保所有静态链接库都链接到运行时库的相同版本?
Chr*_*cke 13
这应该不是问题.每个库都链接到自己的运行时,并且大多数独立于进程中的其他库.当库ABI被严格定义时,问题就出现了.如果在一个库中分配任何类型的堆分配对象,通过库边界传递并在另一个库中"释放",则会出现问题,因为正在使用不同的堆管理器从用于分配的堆管理器中释放块它.
任何类型的c-runtime定义的结构,对象或实体都不应该在可能正在使用不同运行时版本的边界上传递: - 从一个库获得的FILE*对于链接到一个库的不同库没有意义不同的运行时
只要库API只使用原始类型,并且不尝试在指针中传递free(),或者传递指向内部malloc()内存的指针,他们希望应用程序(或其他库)释放()你应该可以.
如果c-runtimes混合在一起,很容易让FUD"崩溃",但你必须记住libs和动态库(.so/.dll/.dylib)传统上已经开发出来了语言:允许用asm,c,c ++,fortran,pascal等编写的代码通过有效的CPU高效二进制接口进行通信.
当C与C链接时为什么会突然发生恐慌?