链接错误 ->托管 DLL 到非托管库

Linking error -> Managed DLL to Unmanaged Lib

本文关键字:DLL 托管 错误 gt 链接      更新时间:2023-10-16

我有一个托管的c++ dll,它使用一个非托管的c++库。我已经在管理项目的"附加依赖项"中添加了lib文件。不幸的是,我已经在msvcprtd中定义了一打std::locale。库链接错误。

任何想法?我必须建立两者作为dll和链接在一起吗?

您可能需要更改其中一个项目的运行时库设置,以便它们都相同。运行时库设置中的"多线程调试DLL"选项意味着您的项目将与运行时库的DLL版本相链接,而不是您的项目是DLL。而"多线程调试"意味着它将链接到标准库的。lib版本。

当您将使用不同设置的两个项目链接在一起时,它们最终会有重复的引用。一个引用来自静态运行时库,一个引用来自DLL运行时库。这就是你错误的根源。

您应该选择哪个设置取决于您是否希望与项目一起分发运行时dll(或者依赖于已经拥有它们的用户)。如果您想使用此选项,请选择DLL运行时库,否则请选择非DLL版本。非DLL版本的缺点是,所有的运行时库代码将嵌入到您的DLL/EXE中,这将增加它的大小。

编辑:实际上,再深入研究一下。这个链接表明,与CLR项目(我怀疑你的是,被管理的c++),你不能使用静态链接选项,所以你需要使用"多线程调试DLL"选项。