(solaris)ld:致命:。。。版本';GCC_4.2.0';不存在 我试图在这个机器上首次编译一个C++程序(这不是我的),所以我写了一个简单的Hello World。我的编译命令出错 >g++ testing.cpp -L/usr/local/lib ld: fatal: file /usr/local/lib/libgcc_s.so: version 'GCC_4.2.0' does not exist: required by file /usr/local/lib/libstdc++.so

(solaris)ld:致命:。。。版本';GCC_4.2.0';不存在 我试图在这个机器上首次编译一个C++程序(这不是我的),所以我写了一个简单的Hello World。我的编译命令出错 >g++ testing.cpp -L/usr/local/lib ld: fatal: file /usr/local/lib/libgcc_s.so: version 'GCC_4.2.0' does not exist: required by file /usr/local/lib/libstdc++.so,c++,gcc,linker,C++,Gcc,Linker,但我有一件事: >file /usr/local/lib/libgcc_s.so /usr/local/lib/libgcc_s.so: ELF 32-bit LSB dynamic lib 80386 Version 1 [FPU], dynamically linked, not stripped 如果我做了以下任何一件事,我会发出咯咯的笑声: >g++ testing.cpp >g++ testing.cpp -L/usr/sfw/bin >g++ tes

但我有一件事:

>file /usr/local/lib/libgcc_s.so
/usr/local/lib/libgcc_s.so:     ELF 32-bit LSB dynamic lib 80386 Version 1 [FPU], dynamically linked, not stripped
如果我做了以下任何一件事,我会发出咯咯的笑声:

>g++ testing.cpp
>g++ testing.cpp -L/usr/sfw/bin
>g++ testing.cpp -L/local/bin
我得到了同样的错误(目录没有改变,可能是因为bin中没有libgcc_?)

位于
/usr/local/lib/gcc/i386-pc-solaris2.10/
我看到
3.4.6
4.3.3

我看到一个符号链接
/usr/local/lib/libcc_.so
指向2001年创建的
libgcc_.so.1

我在别处看到了以下检查版本的方法,但它不返回任何结果:

/usr/local/lib>strings libgcc_s.so.1 | grep GCC
我的问题是:

  • 到底发生了什么?链接器是否接受“有点旧”的库,但拒绝真正旧的库,如2001?链接器会因为版本太新而感到不安吗
  • 有没有办法知道libgcc_是什么版本的
  • 我可以通过创建符号链接欺骗并强制它使用当前安装的版本吗?如果是,我应该创建什么符号链接

  • 感谢您的阅读和提供的任何建议。

    我怀疑gcc库,请检查操作系统的版本(32/64位)并相应地安装gcc库。

    哇。我觉得很傻。我所需要做的就是通过将命令更改为来指定要使用的特定g++版本

    /usr/sfw/bin/g++ testing.cpp
    
    塔达!程序编译并运行成功

    如果其他人有这个问题,运行
    哪个g++
    并尝试各种选项可能会有所帮助

    >which g++ 
    g++ is /usr/local/bin/g++
    g++ is /usr/sfw/bin/g++
    g++ is /local/bin/g++
    g++ is /usr/local/bin/g++
    g++ is /usr/sfw/bin/g++
    g++ is /local/bin/g++
    g++ is /usr/local/bin/g++
    g++ is /usr/sfw/bin/g++
    g++ is /local/bin/g++
    g++ is /usr/local/bin/g++
    g++ is /usr/sfw/bin/g++ 
    g++ is /local/bin/g++
    

    嗯,我正在尝试使用现有的库,因为它们已经成为机器的一部分很多年了,而其他程序几年前才编译好。(另外,即使是64位,我也尝试在我的编译器命令中使用
    -m32
    标志,但它并没有改变错误。)谢谢。顺便说一句,您在这里给出的响应并不是真正的答案。。。下一次也许会考虑评论。
    >which g++ 
    g++ is /usr/local/bin/g++
    g++ is /usr/sfw/bin/g++
    g++ is /local/bin/g++
    g++ is /usr/local/bin/g++
    g++ is /usr/sfw/bin/g++
    g++ is /local/bin/g++
    g++ is /usr/local/bin/g++
    g++ is /usr/sfw/bin/g++
    g++ is /local/bin/g++
    g++ is /usr/local/bin/g++
    g++ is /usr/sfw/bin/g++ 
    g++ is /local/bin/g++