更具体地说,假设两个编译器都在同一平台上(OS +指令集).但是,其中一个目标文件是由依赖于编译器的代码构成的.另一方面 - 代码是面向对象的并且尊重封装.
我需要这个用于我正在制作的一种框架.目标平台是GCC和Java虚拟机的任何系统.实际上,该框架将在每个平台上编译.使用框架用户的编译器取决于他.
我已经阅读了一些关于GCC vs MSVC的问题以及这些编译器的开发,比如GCC值得在Windows上用来取代MSVC?,Visual Studio还是GCC?和GCC vs MS C++编译器用于维护API向后二进制兼容性.但这些都是过时的问题(2011年).随着新的c ++ 14功能的出现,两个编译器之间开始平衡.是否仍然值得使用Windows上的Code :: Blocks以及使用Microsoft Visual Studio的所有优点,例如:
在我读过的大多数主题中,他们总是说GCC代码生成比MSVC更好,但是这个问题的差异开始缩小.GCC的代码生成是否更好?那些最新的c ++功能呢,它们中的哪一个领先?
我在使用GCC与MSVC时看到的最大优势是:
GCC上的C++ 14功能:https://gcc.gnu.org/projects/cxx1y.html
MSVC RTM上的C++ 11和C++ 14功能:http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs- 2015年,rtm.aspx
我主要是一个C++人.由于C++缺少官方ABI,我总是使用类似COM的方法来支持多个编译器的组件设计.
最近我遇到的问题是Objective-C是否会取代类似COM的方法.显然,对于Objective-C来说,替换它需要一个稳定的ABI,因此我想知道Objective-C是否存在稳定的ABI(在所有主要操作系统[OSX,GNU/Linux,Windows]上)以及如何容易它将使用Objective-C(++)作为由不同编译器创建的组件之间的"粘合剂".
编辑: 正如Nikolai Ruhe所指出的,对COM的简短描述可能会有所帮助.COM本质上是一个"二进制标准",它允许混合不同编译器(以及各种语言)的二进制文件.COM的工具是接口,它定义了方法(映射到C++的虚函数).组件实现至少一个接口并作为DLL分发.它们可以位于系统的任何位置(位置在注册表中指定),并且可以由任何COM客户端通过它们实现的接口的ID加载.
我打算做一个C++插件接口ala 如何从dll创建一些类(dll中的构造函数)?(с++) 但是有人担心如果接口用于通过MinGW或Borland和DLL创建DLL loader是用MSVC++编译的,可能有问题.由于唯一导出的函数被声明为extern"C",我不明白为什么它不起作用?
想法?
c++ ×4
dll ×1
gcc ×1
interface ×1
linker ×1
object-files ×1
objective-c ×1
plugins ×1
visual-c++ ×1