考虑这种情况: 一个应用程序的链接的第三方库甲

一个是使用2008 MSVC内置和静态链接(即,与/ MT建立)至C运行时库9.0。

应用程序使用2005 MSVC内置和静态链接到A和(使用/ MT)到C运行时库8.0。

我可以看到麻烦,这一点 - 例如,如果类型是在运行时库版本之间的头改变。

时注意保持版本之间的兼容运行时库头护理,或者每个人都应该确保所有静态链接库链接到相同版本的运行时库的?

有帮助吗?

解决方案

不会成为一个问题。每个库链接到自己的运行时,大多独立进程中的其他库中的函数。问题是当库ABI被严重定义有关。如果任何堆分配对象在一个库分配,整个图书馆界过去了,在另一个库“释放”有将是问题,因为不同的堆管理器被用于释放块从堆管理器用于分配它

任何类型的C-运行时定义的结构,对象或实体的不应该被传递翻过boundries其中可能正在使用不同的运行时版本: - FILE *从一个库例如获得的将没有任何意义,一个不同的库链接的是一个不同的运行时。

只要库API的使用只是原始类型,不要试图在指针传递的free(),或传递出指针内部的malloc()',他们希望D内存的应用程序(或另一个库)免费()你应该确定。

它很容易爱上的FUD说:“任何事情都有可能出问题”如果C-运行时混合,但你要记住,库和动态库(.so / .DLL /名为.dylib)历来在发达国家各种各样的语言:允许写在ASM,C,C ++,FORTRAN,PASCAL等经由有效CPU有效的二进制接口comminicate代码

当被链接到C C

为什么突然恐慌?

其他提示

这是一个非常糟糕的计划。避免。要么重新编译库2005年或2008年编译应用程序。

这不是一个好主意。您可以在由运行时库,以及他们如何实现某些类型所做的假设没有控制权。这是更有可能会比不创建邪恶混乱。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top