我有一个托管C ++ DLL,它使用非托管C ++库。我在托管项目的“附加依赖项”中添加了lib文件。不幸的是,我在msvcprtd.lib链接错误中已经定义了十几个std :: locale。
有什么想法吗?我是否必须将它们构建为dll并将它们链接在一起?
答案 0 :(得分:2)
您可能需要更改其中一个项目的运行时库设置,以使它们都相同。运行时库设置中的“多线程调试DLL”选项意味着您的项目将链接到运行时的DLL版本,而不是您的项目是DLL。其中 - “多线程调试”意味着它将链接到标准库的.lib版本。
当您将2个使用不同设置的项目链接在一起时,它们最终会出现重复引用。静态运行时库中的一个引用,以及DLL运行时库中的一个引用。这是您的错误来源。
您应该选择哪种设置取决于您是否要将运行时DLL与项目一起分发(或者指望已经拥有它们的用户)。如果要使用此选项,请选择DLL运行时库,否则请选择非DLL版本。非DLL版本的缺点是所有运行时库代码都将嵌入到DLL / EXE中,这将增加它的大小。
编辑:实际上,再多看一下。 This link表示对于CLR项目(我怀疑你的是托管C ++),你不能使用静态链接选项,所以你需要使用“多线程调试DLL”选项。