我已经阅读了双方关于是否应该在Visual Studio项目中静态或动态地链接到C运行时库的参数,并且我仍然不完全确定要考虑什么.
我的项目引入了一些第三方库(Python,HDF5,Trilinos和Microsoft MPI),每个库都必须使用与我的最终可执行文件相同的运行时库构建(否则它们不能链接在一起).静态链接时,每个库都将包含C运行时的副本.我读到这很容易引起问题,因为最终的可执行文件将包含运行时的多个副本,其中没有一个可以相互交互.但是,如果相同的符号被多重定义,链接器是否会抱怨?
我想避免"DLL Hell",但我担心在运行时的多个副本中静态链接可能会产生的阴险错误.我读错了吗?
此外,我正在使用Visual Studio 2005,我读到Service Pack 1运行时不向后兼容.这是否意味着没有SP1构建的应用程序将无法在具有SP1 dll的计算机上运行,即使它们具有相同的名称(例如msvcr80.dll)?
我想在链接时替换默认的malloc以使用自定义malloc.但是当我尝试在我的程序中重新定义malloc时,我收到此错误:
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _malloc already defined in test.lib(test.obj)
这适用于任何Unix,它适用于具有大多数功能的Windows,但不适用于malloc.我怎样才能做到这一点?与malloc不同的是,它不允许覆盖它?
我知道我可以用我的自定义malloc替换每次对malloc的调用,或者使用宏来执行此操作,但我宁愿不修改每个第三方库.