【问题标题】:are gcc-3 binaries compatible with gcc-4gcc-3 二进制文件是否与 gcc-4 兼容
【发布时间】:2011-05-06 15:24:30
【问题描述】:

我有一个使用 gcc 3.4.3 编译的静态库。我想在现在将使用 gcc-4 编译的代码中使用它。 我模糊地读到 gcc-3 和 gcc-4 二进制文件不兼容,并且需要重新编译该库,但只想对此进行确认。 反正 gcc-3 库不能和 gcc-4 一起使用吗?

【问题讨论】:

  • 您已同时标记了 C++ 和 C。该库是否包含 C++ 代码?
  • 是的,虽然在不同的库中。例如 library1.a 是 c 代码。 library2.a 是 cpp 代码。
  • 你为什么不直接重新编译并停止担心这个?

标签: c++ c compatibility gcc4 gcc3


【解决方案1】:

让组织中的其他人或供应商处的其他人将他们的库更新到 gcc 4 并不总是一种选择,尤其是如果他们已经放弃了它。

如果 C++:假设能够链接,则在运行时您可以在使用流的 C++ 标准库模板代码中炸毁,因为 g++ 4 生成的符号将针对 g++ 3 生成的定义进行解析。

链接时您可能会看到此警告:

/usr/bin/ld: 警告: libstdc++.so.5, 需要 (legacy static lib), 可能与 libstdc++.so.6 冲突

这是一个你可以进入的例子:基类析构函数~basic_stringbuf()(实际上是一个模板)可以定义在你在g++ 3下编译的模块中,它被libstdc++so中的析构函数~basic_ostringstream()错误地调用了.6,由 g++ 4 编译模块调用。 Ka-Boom。

我尝试了 compat-libstdc++-33,但没有成功。

也就是说,我仍然将 32 位 gcc 3 时代 C 库链接到我的 gcc 4.1.2 C++ 程序中。

【讨论】:

  • 这实际上是名称修改更改的问题。 C 没有这些问题,因此您可以链接到旧的 C 库。
  • 通常。有时 C 库更改为链接可以工作但代码不能工作的地步。这几乎总是由于 getc 和朋友的宏扩展。
  • 但是,如果库是全静态链接的,这将不是问题。
  • 非常有用的 cmets,但我猜这个问题的答案会有所不同,具体取决于是否能够链接到旧库。
猜你喜欢
  • 2011-03-14
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多