我们在 HP-UX 11.31 和 gcc 4.4.3 上运行 Oracle 11。好像没办法链接到occi,因为是用aCC建的。有什么解决方法吗?
我有一个愚蠢的想法,即我可以以某种方式构建一个基本上代理连接的库 - 以某种可以通过 gcc 链接的方式使用 aCC 构建库。这可能吗?
不,没有办法解决这个问题。
不同的 C 编译器具有使用标准 ABI 的可互换代码。您可以或多或少地混合和匹配他们的目标代码而不受惩罚。
但是,不同的 C++ 编译器有各种不同的约定,这意味着它们的目标代码是不兼容的。这些与类布局有关(尤其是在多重继承层次结构和可怕的“死亡钻石”中),还与名称修改约定和异常处理有关。名称修改方案是故意不同的,这样您就不会意外地将一个编译器中的对象与另一个编译器链接起来。
通常,如果库是使用 C++ 编译器构建的,则必须使用相同的(或至少兼容的)C++ 编译器来链接代码。这几乎总是意味着来自同一家族的编译器。例如,即使代码是使用 G++ 4.4.2 构建的,您也可以使用 G++ 4.5.0。但是,您将无法将 aCC 与 G++ 混合使用。