尝试编译VTK以使用静态运行时库时,示例上的链接错误

时间:2015-05-22 11:22:56

标签: c++ linker-errors vtk

我想编译VTK,因此它在visual studio中使用静态运行时库(/ mt和/ MTd在visual studio中)而不是动态运行时库(/ Md和/ MDd)。

为此,我更改了VTK附带的CmakeLists文件并将这些行添加到其中:

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:\Local\VTK-6.2.0\build\Examples\Tutorial\Step3\Cxx\MSVCRTD.lib(ti_inst.obj)   Cone3

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

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

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

直接的方法是忽略-default-library MSVCRTD.lib - 但是我会建议在解决它之前理解这个问题。

您可以使用/ VERBOSE构建,搜索MSVCRTD.lib的输出并到达加载它的第一个位置。可能它是示例使用的第三方库,或者您必须切换的其他项目。