可以用G ++编译的程序4.1直接调用由G ++ 2.0编译的库吗?

时间:2014-02-25 08:23:43

标签: c++ gcc dynamic-library

我需要为我们的项目升级编译器(非常旧的代码,从g ++ 2.0到4.0)。但是,我们的项目使用了一些第三个库(只拥有二进制文件)。 我必须使用新的编译器重建它们,否则我仍然可以直接调用旧的二进制文件。

任何人都知道这一点,请善待我。

谢谢

2 个答案:

答案 0 :(得分:1)

它不起作用:

  • g ++ 2.0不使用标准ABI [1];
  • g ++> = 3使用Itanium ABI [1];
  • 没有选项可以切换回旧的非标准ABI [2]。

[1]«GNU C ++编译器使用从版本3开始的行业标准C ++ ABI»http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

[2] http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-fabi-version-144

答案 1 :(得分:0)

这完全取决于如何定义第三方库的API。

如果(例如)内存在库中分配并在代码中释放,意味着可能会使用两个版本的C运行时,那么您将崩溃。

所以可以肯定的是,您需要研究所有导出函数的行为。这可能是不可能的。

我可以建议为所有API函数构建测试或考虑完全删除第三方库。

相关问题