代码之家  ›  专栏  ›  技术社区  ›  Matěj Zábský

静态链接的非托管库和C++CLR

  •  1
  • Matěj Zábský  · 技术社区  · 17 年前

    2 回复  |  直到 17 年前
        1
  •  3
  •   Coincoin    17 年前

    LNK2022很难精确定位。这通常意味着影响结构布局的模块配置之一与其他模块不同。

    检查以下常见原因:

    • 确保您的所有项目都为当前的解决方案配置使用相同的运行时库(/MDd或/MD)。如果一个项目使用Debug,而其他项目使用Release,反之亦然,您将收到LNK2022错误。
    • 确保所有项目都使用相同的结构杆件对齐方式。如果一个项目正在使用/Zp开关,请特别注意。此外,请确保不要有条件地使用#pragma-pack(n)。

    您可以使用/d1reportSingleClassLayout_your-class-name_(不带空格)来获取有关有问题的类布局的信息。

    有关更多信息,请参阅: Diagnosing Hidden ODR Violations in Visual C++

        2
  •  1
  •   R Caloca    17 年前

    我发现混合使用不同crt运行时版本编译的本机代码静态库的唯一方法是编写一个DLL,充当库之间的桥梁。 例如:

    your.exe-使用/MD和clr编译 yourbridge.dll-本机,使用/MT编译,包括使用/MT构建的所有第三方库。