C++ POSIX OO 跨平台库,可跨语言和编译器使用
C++ POSIX OO Cross Platform Library for use across languages and compilers
这是我在这里的第一个问题,所以我对任何错误表示歉意,并将尽可能具体。我们需要开发一个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 配合使用。
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ Cmake没有在Travis CI服务器上设置编译器语言标准
- 如何为动态类型语言构建编译器
- 区分头文件和编译器/语言标准/os/glibc
- C++ POSIX OO 跨平台库,可跨语言和编译器使用
- 在 dll 边界上公开 std::vector语言 - 编译器独立性的最佳实践
- 有关在C++中为很酷的语言制作编译器的问题
- GCC 编译器上布尔类型的 C 和C++语言的默认初始值设定项是 64 而不是 0。这是编译器错误?
- 链表中的线性搜索[语言:C++编译器:Dev Cpp 4.9.9.2]
- 将CMake与同一语言的多个编译器一起使用
- 如果没有可用的C++编译器,C语言可以调用用C++编写的DLL吗
- 是常量变量,默认为内部链接语言特定或编译器特定的功能
- 是适用于C语言的Gnu编译器限制
- 编译器问题或c语言代码块中的一些错误
- 为什么编译器不帮助我们解决类型特征,而是求助于语言怪癖?
- 是否有这么好的C编译器使得fortran成为一种多余的语言?