C++ POSIX OO 跨平台库,可跨语言和编译器使用

C++ POSIX OO Cross Platform Library for use across languages and compilers

本文关键字:语言 编译器 OO POSIX 跨平台 C++      更新时间:2023-10-16

这是我在这里的第一个问题,所以我对任何错误表示歉意,并将尽可能具体。我们需要开发一个C++的POSIX OO跨平台库,用于跨语言和编译器。由于我们需要能够在不同的操作系统(例如Windows,Linux和Android)以及一些嵌入式操作系统(如Integrity)上使用此库,因此我们决定在Cygwin或Mingw下开发它。库本身将是一个C++面向对象的代码,POSIX标准。正如我已经提到的,我们需要能够跨不同的语言加载和使用此库。因此,为了能够从托管代码使用此库,我们首先考虑将其包装为非托管 MS Visual C++ 代码。在这里,我们将面临广泛的问题。Visual C++使用不同的编译器,因此链接在Cygwin/Mingw下编译的C++OO库几乎是不可能的任务。主要问题是名称重整,然后是不同的结构对齐问题,底层异常和内存模型的冲突。另一种选择是使用相同的代码,但使用不同的编译器进行编译,例如Cygwin和MS Visual C++。此选项的问题是Visual C++编译器不支持POSIX。

那么,有人遇到过同样的问题吗?关于如何开发这样的库或至少为不同的编译器重用代码的任何想法?

非常感谢

对此的任何帮助,谢谢。

解决方案是提供C++类的"扁平化"C包装器(这个概念在很大程度上是从Rudy Velthuis借来的:见 http://rvelthuis.de/articles/articles-cppobjs.html)。若要平展类,请为每个类成员函数以及构造函数和析构函数创建一个 C 函数。构造函数的 C 包装器返回指向该类对象的指针。其他成员函数(包括析构函数)的包装器将此指针作为其第一个参数。这些 C 包装器必须具有由 DLL 导出的外部"C"声明,并提供对C++对象的间接访问(此处的更多详细信息:http://www.aaronreeves.com/windows-dlls-part-3)。因此,对于外部单词来说,这样的DLL看起来像是用C编写的DLL。用 C 语言编写的 DLL 可以很好地与来自各种来源的 EXE 配合使用。