相关疑难解决方法(0)

使用来自不同时间/团队编译的同一VS的C++ DLL - ABI兼容性?

重复:我正在寻找相同 Visual-C++版本的库之间的ABI兼容性!

我们希望混合和匹配来自不同团队的一些内部C++ DLL - 在不同时间使用不同的项目文件构建.由于构建时间较长,我们确实希望避免大型单片构建,其中每个团队重新编译另一个团队库的源代码.

当消耗C++的DLL 和C++的接口相当 清楚 的是,你只能这样做,如果所有的DLL与相同的编译器/ Visual Studio的版本编译.

什么对我来说并不很明显是什么,到底需要是相同的,以获得ABI的兼容性.

  • 显然, debug(_DEBUG)和release(NDEBUG)不能混合 - 但是这些链接到不同版本的共享运行时这一事实也很明显.
  • 您是否需要完全相同的编译器版本,或者生成的DLL链接到同一共享 C++运行时是否足够- 也就是说,基本上是相同的可再发行组件?(我认为当传递完整的C++对象时静态不会飞)
  • 是否存在编译器(和链接器)选项的文档列表,这些选项需要相同才能兼容相同vc ++版本的两个C++ DLL?
    • 例如,是否/O需要相同的开关 - 优化级别是否会影响ABI兼容性?(我很确定不会.)
    • 或者两个版本都必须使用相同的/EH开关
    • 还是/volatile:ms|iso......?

本质上,我想提出一组(元)数据来与描述它的ABI兼容性的Visual-C++ DLL相关联.

如果存在差异,我现在只关注VS2015.

abi visual-c++ visual-studio-2015 visual-c++-2015

8
推荐指数
1
解决办法
538
查看次数

如何在VS版本中制作一致的dll二进制文件?

例如,winsock libs在所有版本的visual studio中都能很好地工作.但是我在为所有版本提供一致的二进制文件时遇到了麻烦.使用VS 2005编译的dll在链接到2008年编写的应用程序时将无法工作.我将2k5和2k8升级到SP1,但结果没有太大变化.它的工作原理还可以.但是当它们将它包含在C#应用程序中时,C#应用程序会出现访问冲突错误,但使用经典的C++应用程序时,它可以正常工作.

当我提供dll时,我应该知道一个策略吗?

.net c++ dll

6
推荐指数
2
解决办法
2472
查看次数

标签 统计

.net ×1

abi ×1

c++ ×1

dll ×1

visual-c++ ×1

visual-c++-2015 ×1

visual-studio-2015 ×1