1

我们正在尝试将 OCCI 与 GCC 一起使用。OCCI 是使用 sun studio 编译器编译的。是否有可能将 OCCI 与 GCC 一起使用而不是 sun 本机编译器 CC?

4

1 回答 1

0

您实际上不能混合多个 C++ 运行时库。

C++ 运行时实现非常复杂。这篇文章解释了一些复杂性:

C++ ABI 的稳定性:编程语言的演变

C++ ABI

C++ ABI 包括 C ABI。此外,它还涵盖以下功能:

  • 分层类对象的布局,即基类和虚拟基类

  • 指向成员的布局

  • 传递隐藏函数参数(例如,this)

  • 如何调用虚函数:

    • Vtable 内容和布局

    • 指向 vtable 的指针在对象中的位置

    • 查找 this 指针的调整

  • 查找基类偏移量

  • 通过指向成员的指针调用函数

  • 管理模板实例

  • 名称的外部拼写(“名称修饰”)

  • 静态对象的构造和销毁

  • 抛出和捕获异常

  • 标准库的一些细节:

    • 实现定义的细节

    • typeinfo 和运行时类型信息

    • 对成员的内联函数访问

您还可以添加不同的 C++ 编译器以不同的方式实现名称修饰,从而无法在 Solaris 上直接将 OCCI 与 GCC 一起使用。

你也许可以让某些东西发挥作用,但你所做的任何事情充其量都是极其脆弱的。下一个操作系统或 C++ 运行时更新可能会破坏事情,您可能无法解决问题。

除非您正在编写非常简单的应用程序,否则我强烈建议您只使用 Solaris Studio 编译器 - 并熟悉包括性能分析、内存检查甚至竞争条件检测在内的整套工具,我认为其中大部分是优于与 GCC 一起使用的工具。

于 2016-05-31T00:23:32.617 回答