我已经阅读了关于在Visual Studio项目中静态链接还是动态链接C运行时库的双方观点,但我仍不确定该如何看待此问题。
我的项目引用了一些第三方库(Python、HDF5、Trilinos和Microsoft MPI),每个库都必须使用与最终可执行文件相同的运行时库进行构建(否则它们无法链接在一起)。当静态链接时,每个库将包含一个C运行时库的副本。我读到说这可能会导致问题,因为最终的可执行文件将包含多个运行时库的副本,而且这些副本都无法彼此交互。但是,如果相同符号被多次定义,链接器不会报错吗?
我想避免“DLL地狱”,但我担心静态链接多个运行时库的副本可能引发隐蔽的错误。我是否理解有误?
此外,我正在使用Visual Studio 2005,我读到Service Pack 1运行时库不向后兼容。这是否意味着没有安装SP1的应用程序将无法在具有SP1 dlls的计算机上运行,即使它们具有相同的名称(例如msvcr80.dll)?