【问题标题】:Can I change mangling for g++ to match xlC?我可以更改 g++ 的修饰以匹配 xlC 吗?
【发布时间】:2019-10-27 01:43:44
【问题描述】:

我正在尝试使用 g++ 在 aix 上编译代码,因为 c++11 的 xlC 支持非常有限。

由于名称修改不同,我无法将我的代码与 aix 共享库链接。

xlC 支持名称修改替换 (-qnamemangling=v13),但 IBM 没有提供源代码,因此我需要使用 g++(或 xlclang++)和 xlC 名称修改重新编译。

xlC版本为V16.1

是否可以替换 g++(或 xlclang++)的名称修饰以匹配 xlC?

还有其他选择吗?

【问题讨论】:

  • 好吧,C++ 没有标准化二进制文件格式;不同编译器的对象模块和库不太可能兼容。

标签: g++ aix name-mangling xlc


【解决方案1】:

xlC 和 g++ 在 AIX 上不兼容。它们使用不同的对象模型和标准库。

XLC++ 16.1 中有一个 xlclang++ 编译器,它完全支持 C++11,但是它也不能与 xlC 互操作,因为与 C++11 的兼容性被破坏了。 xlclang++ 使用基于 libc++ (LLVM) 的标准库,而 xlC 使用其自己的旧版 libC.a 库。保留通过 C 的兼容性,因此您可以选择重新编译或将您的接口重新编译为非重新编译的 C++ 接口以通过 C 层。

【讨论】:

  • 我可以链接到extern "C" 函数,因此我猜它并没有那么不同。我考虑过替换 g++ 的修饰方法或类似的方法。
  • 您可以使用 extern "C",但是要小心,因为一旦您从 xlC 跨到 xlclang++ 编译代码,您应该假设 C++ 类型的布局会有所不同。考虑: extern "C" void foo(std::vector &v);如果向量是在 xlC 端创建并在 xlclang++ 端使用,则不期望这会起作用(即使对于用户定义的 C++ 类型也是如此。)编译器更改了重整以节省您的时间。使用 extern "C" 是一种覆盖,您知道自己在做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2021-05-20
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
相关资源
最近更新 更多