链接错误 ->托管 DLL 到非托管库
Linking error -> Managed DLL to Unmanaged Lib
我有一个托管的c++ dll,它使用一个非托管的c++库。我已经在管理项目的"附加依赖项"中添加了lib文件。不幸的是,我已经在msvcprtd中定义了一打std::locale。库链接错误。
任何想法?我必须建立两者作为dll和链接在一起吗?
您可能需要更改其中一个项目的运行时库设置,以便它们都相同。运行时库设置中的"多线程调试DLL"选项意味着您的项目将与运行时库的DLL版本相链接,而不是您的项目是DLL。而"多线程调试"意味着它将链接到标准库的。lib版本。
当您将使用不同设置的两个项目链接在一起时,它们最终会有重复的引用。一个引用来自静态运行时库,一个引用来自DLL运行时库。这就是你错误的根源。
您应该选择哪个设置取决于您是否希望与项目一起分发运行时dll(或者依赖于已经拥有它们的用户)。如果您想使用此选项,请选择DLL运行时库,否则请选择非DLL版本。非DLL版本的缺点是,所有的运行时库代码将嵌入到您的DLL/EXE中,这将增加它的大小。
编辑:实际上,再深入研究一下。这个链接表明,与CLR项目(我怀疑你的是,被管理的c++),你不能使用静态链接选项,所以你需要使用"多线程调试DLL"选项。
相关文章:
- VS2010 C++ 调试托管 (C++/CLI) DLL
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- C++/CLI 混合托管/本机 DLL 不起作用
- 从非托管 C# DLL 返回列表/数组
- CLR dll 无法运行托管 DLL,除非它位于 exe 目录(或其子目录)内
- 如何在 lua cpp 模块中调用托管 c++ dll 函数
- 由非托管 EXE 引用时托管 DLL 的应用程序配置
- Unity 如何使用本机 dll 或转换为托管
- 将本机非托管的C DLL加载到托管的C#应用中,导致DLL输出垃圾
- P/调用C++用于填充托管缓冲区的 DLL
- 初始化 C# IntPtr 以接受来自非托管 C++ DLL 的数据?
- 由于mcordbi.dll的错误版本,托管调试不再起作用
- 从非托管 DLL 调用 UWP api
- 将 DLL 附加到托管进程不起作用
- 合并 c 可执行文件、托管 COM dll 和 .Net GUI
- C# 到非托管 C++ DLL 访问冲突/"frame not in module"
- 托管C#Win32应用程序的非托管DLL.与课堂入口
- 将可变长度字节数组从 C# 传递到非托管C++ dll
- visual将非托管C++dll添加到托管C++dll
- 创建非托管常规 MFC DLL 并从托管 C++ .NET 应用调用它时出现问题