【问题标题】:Error linking with GCC 4.3.2 on RHEL 5.3 and libstdc++.so. Any GCC gurus?在 RHEL 5.3 和 libstdc++.so 上与 GCC 4.3.2 链接时出错。任何 GCC 大师?
【发布时间】:2009-07-13 08:02:28
【问题描述】:

尝试使用 RHEL5.3 GCC 4.3.2 编译器在该平台上构建我的软件。无论我在使用 -O2 编译时尝试什么,我都会收到以下错误,但它在没有优化的情况下构建良好。有什么想法吗?

/usr/bin/ld: myapp: hidden symbol `void std::__ostream_fill<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, long)' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output

在 RHEL5.3 中,我使用 /usr/bin/g++43 进行编译和链接。正确的libstdc++.so 可以在这里找到:

/usr/lib/gcc/i386-redhat-linux6E/4.3.2/libstdc++.so

这是一个包含INPUT ( -lstdc++_nonshared /usr/lib/libstdc++.so.6 ) 的文本文件。

那会不会和系统stdlibc++ 4.1版本不匹配?

【问题讨论】:

    标签: c++ linux gcc linker g++


    【解决方案1】:

    原来是 RHEL 5.3 中的一个 GCC 错误:-/。 https://bugzilla.redhat.com/show_bug.cgi?id=493929。我向维护者 Jakub Jelinek 发送了一封电子邮件,他说 RHEL 5.4(即将发布)将进行修复,并且还会升级到 GCC 4.4。

    一种解决方法是使用 -fno-inline,但这有一些明显的缺点。

    【讨论】:

      【解决方案2】:

      您似乎遇到了visibility 问题——我们可以查看您的完整命令行吗?

      例如,-fvisibility-inlines-hidden 所做的事情可能会在不同的优化级别上发生变化,因为 GCC 决定内联不同的东西。

      【讨论】:

      • 对于一个组件:/usr/bin/g++43 -c -pipe -Wextra -Wcast-qual -Wno-long-long -m32 -O2 -Wall -W -D_REENTRANT -DQT_GUI_LIB - DQT_CORE_LIB -DQT_SHARED -D_REENTRANT -D_GNU_SOURCE -DQT_NO_DEBUG -DQT_WEBKIT_LIB [各种包括等] 对于链接:/usr/bin/g++43 -Wl,-O1 -Wl,-rpath,/home/hudson/qt4/lib - o myapp [...大量 .o 文件] [各种静态和共享库] 这是一个 qmake/qt 4.5 项目
      • 好吧,如果您对问题进行编辑而不是评论,我会更喜欢它,但是哦,好吧:) 嗯,所以这不是很明显;我将不得不尝试找到一个小测试用例来重现这一点。
      • 我能够使用最新的 Gnucap 快照 (gnucap.org/devel) 重现这一点——可能是 RHEL 5.3 GCC 特定的我设置 CC=/usr/bin/gcc43 CXX=/usr/bin/g+ +43 LINK=/usr/bin/g++43,然后运行configure和make。同样的错误
      【解决方案3】:

      它只发生在优化中。这是否提供了线索?

      【讨论】:

        猜你喜欢
        • 2010-12-28
        • 2012-06-20
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多