链接错误的例子,当试图编译VTK使用静态运行时库



我想编译VTK,所以它使用静态运行时库(/Mt和/MTd在visual studio)而不是动态运行时库(/Md和/MDd)在visual studio

为了做到这一点,我改变了VTK附带的cmakelist文件,并添加了这些行:
if (MSVC)
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT" )
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}  /MTd" )
endif (MSVC)

当我试图构建样本时,我得到这个链接器错误:

Error   101 error LNK2005: "private: __cdecl type_info::type_info(class type_info const &)" (??0type_info@@AEAA@AEBV0@@Z) already defined in LIBCMTD.lib(typinfo.obj)   C:LocalVTK-6.2.0buildExamplesTutorialStep3CxxMSVCRTD.lib(ti_inst.obj)   Cone3

如果我删除添加到cmakelists中的部分,它将编译并运行所有示例。

由于我的应用程序已经使用静态库,我需要确保VTK也使用静态库。

如何解决这个问题?

直接的方法是忽略-default-library MSVCRTD。lib -但我建议在像那样踩它之前先理解这个问题。

您可以使用/VERBOSE进行构建,在输出中搜索MSVCRTD。Lib并到达加载它的第一个位置。它可能是本示例使用的第三方库,或者是您必须切换的不同项目。

最新更新