【问题标题】:g++ and libstdc++g++ 和 libstdc++
【发布时间】:2011-06-06 15:38:31
【问题描述】:

我有以下设置。

在 /usr/lib 下安装了 libstdc++(旧)的 redhat 4 机器,并将旧版本的 gcc 安装到默认位置。

我们还在另一个目录中安装了更新版本的 gcc 4.4.5,其中包含更新版本的 libstdc++。

当我使用 4.4.5 构建程序并尝试运行时,我收到错误消息,表明我使用的是旧版本的 libstdc++。

有没有一种方法可以使新的编译器链接到安装在 /usr/lib 上的系统 libstdc++,而不是它附带的那个。

提前致谢

【问题讨论】:

  • 执行ldd <lib|exe> 以显示依赖关系。

标签: c++


【解决方案1】:

(我知道这是一个老问题,这是给谷歌同事的)

gcc 似乎与其标准包含和标准库密切相关。它们的路径甚至在 gcc 可执行文件中进行了硬编码,因此 gcc vX 应该自动选择与其自身一起构建的相应文件(包括 + 标准库)(构建之前的 ./configure 命令中的选项 --prefix),除非被覆盖。

gcc 标准 C++ 库与 gcc 一起提供并使用相同的命令构建。

因此,不可能/不建议使用不匹配的标准库和编译器版本,除非运气好,如果更改很小。

【讨论】:

    【解决方案2】:

    为什么要新编译器链接到旧的 libstdc++?问题听起来像是新编译器已经使用旧库,因为它不知道它在哪里。在 LD_LIBRARY_PATH 中指定路径。

    export LD_LIBRARY_PATH="/path/to/my/new/lib:${LD_LIBRARY_PATH}"
    

    【讨论】:

    • Mark - 二进制文件将在没有安装新库的机器上运行。我的目标是保持相同的 libstdc++ 依赖,但更新到较新的编译器。这可能是不可能的;但我还没有得到满意的答案。
    • 由于您也在使用新的标头,因此无法保证两者之间的兼容性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2013-06-05
    相关资源
    最近更新 更多