繁体   English   中英

将公共语言运行时 (/clr) .dll 链接到静态链接到 C/C++ 运行时库的静态库

[英]Linking a Common Language Runtime (/clr) .dll to static libraries statically linked to the C/C++ Runtime Library

我有一个正在 Visual Studio 2010 中编译的 WPF 应用程序,它使用 CLR .dll 与一些非托管 C/C++ 代码进行交互。 这个想法是 WPF 引用 CLR .dll,后者又引用非托管代码。 不幸的是,我遇到了可怕的链接问题,因为非托管 C/C++ 代码和相关库都静态链接到 C/C++ 运行时,但是如果我尝试在 CLR .dll 上使用该代码生成方法,则会引发错误因为 /clr 选项和静态链接到 CRT 是不兼容的。 我需要以某种方式将这些东西粘在一起。

我的想法是尝试创建一个额外的.dll,它只包含一个包中的所有非托管代码(也静态链接到 CRT),然后将链接到 CLR .dll,后者又链接到应用程序(blech !)。 我试图制作这样的 .dll,但问题是(也许很明显?)它没有从静态 .lib 文件中提取任何符号,因为它不需要任何符号。 我尝试强制符号引用 (/OPT:NOREF),但这似乎没有任何作用。 它只是一个空的 .dll,它“链接”到库,但实际上并没有做任何事情。 所以这个想法大错特错。

我把整件事都搞错了吗?

我没有某些非托管库的源代码,因此我无法重新编译它们以动态链接到 CRT。 这些链接问题变得非常令人沮丧!

感谢您的任何建议!

更新:我想这相当于尝试将/MT/MD模块混合在一起, 根据this是不可能的。 您应该如何链接您无法控制第三方库的项目? 您只是希望他们都选择使用相同的运行时库链接方法?! 似乎是一个可怕的想法......

解决方案似乎是您不应尝试将/MT/MD编译的库链接在一起。 我对此感到有些惊讶,因为在某些情况下,您可能无法控制必须链接到的库。 如果您尝试链接到 CLR 项目,您最好希望这些库是使用/MD编译的,否则您就有麻烦了! 就我而言,我能够通过使用 /MD 重新编译一些外部库来解决它。 特别是有一个我无法访问代码,它的DEFAULTLIB是一个静态链接的 C 运行时( libcmt.lib ),但不知何故我能够毫无问题地链接到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM