混合来自不同的编译器C ++代码(Mixing C++ code from different co

2019-07-31 02:59发布

假设我有,我想链接在一起的两个项目:

  • A C ++编译库使用Visual C ++的DLL文件。
  • A C ++可执行文件与使用的类库中的C ++ Builder的编译。

我认识到,没有标准的C ++ ABI,任何试图直接联系这两个C ++项目一起将失败。 什么是创建一个兼容层,让我做到这一点的好,自动化的方式?

例如,可以想到的C ++库可以经由C接口暴露本身。 然后可执行将具有包由C ++库暴露C接口一些C ++类。 既然标准ABI为C,它会工作。

唯一的问题是如何自动创建C接口和C ++包装类 - 手动维护这不会是一个选项。 该项目SWIG看起来很有希望,但不幸的是,C ++是不是在其网站上列出的痛饮的出口之一。 有没有办法做我想痛饮? 还是有比其他SWIG另一个项目,这将有助于我完成这个任务?

或者我要对这个错误的方式?

编辑:++库旨在成为跨平台的核心温度。 可执行文件,很明显,是Windows专用。 我不想核心库污染的程度,就不可能编译它在其他平台上。

Answer 1:

如果它只有在Windows上运行,我会暴露出类作为COM对象。 他们将仍然是一个DLL,他们可以通过了解COM 的任何语言来使用。



Answer 2:

这样,在Windows的“标准”的方式,是使用COM对象。 所以,这肯定是一个不错的选择来看待。 在Linux系统中,模块的交互模型(例如,可执行的DLL相互作用)是非常不同的,并且对于C存在的ABI ++。

如果你想手动执行此操作(创建自己的COM类库),它可以是一个大量的工作有许多有点棘手的问题要认真对待。 你需要一个跨模块RTTI系统,你需要一个接口查询/定义协议,一些机制,来管理模块等。除此之外内存,为“自动”,你可能会需要宏的组合模板元函数。

一个跨平台的选择,我会强烈建议你考虑或者至少看看使用Boost.Python的和Python语言为您的模块之间的“粘合剂”。 Boost.Python库,基本上没有整个“自动出口/类进口”,但出口你的C ++类和函数的Python类和功能。 而且,它完全是非侵入性和跨平台的,所以这确实是自动化出口的一个理想的例子。 所以,你可能会考虑使用Python编写你的高级胶水代码,或使用Python与C之间的中间++模块,甚至返工Boost.Python库,只使用“自动出口”机制,以出口到任何接口系统在设计或使用。

我敢肯定有有的是其他类似的图书馆在那里。 但头号问题,当然,你真的需要吗? 你可能会使用火箭筒杀死一只苍蝇。



Answer 3:

为什么不直接编译C ++ Builder中的库呢?



Answer 4:

在痛饮环顾四周(我知道痛饮应该能包住C ++在C): SWIG和C ++



Answer 5:

如果核心库是跨平台的,为什么不也写的UI作为一个跨平台的Qt应用程序在Windows上的Visual C ++建立的一切。



文章来源: Mixing C++ code from different compilers
标签: c++ c windows swig