9

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

4

1 回答 1

3

让组织中的其他人或供应商处的其他人将他们的库更新到 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.6中的析构函数~basic_ostringstream()调用,它由 g++ 4 编译模块调用。卡轰。

我尝试了 compat-libstdc++-33 但没有运气。

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

于 2011-05-09T19:58:43.313 回答