(solaris) ld: fatal: ... 版本 'GCC_4.2.0' 不存在

(solaris) ld: fatal: ... version 'GCC_4.2.0' does not exist

我第一次尝试在这台机器(不是我的机器)上编译 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

但我有一些东西:

>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_s?):

ld: fatal: file /usr/local/lib/gcc/i386-pc-solaris2.10/4.3.3/../../../libgcc_s.so: version 'GCC_4.2.0' does not exist:
    required by file /usr/local/lib/gcc/i386-pc-solaris2.10/4.3.3/../../../libstdc++.so

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

我看到 /usr/local/lib/libcc_s.so 的符号链接指向 2001 年创建的 libgcc_s.so.1...

我在别处看到过以下检查版本的方法,但是returns什么都没有:

/usr/local/lib>strings libgcc_s.so.1 | grep GCC

我的问题是:

  1. 到底是怎么回事?链接器是否接受 "kinda old" 库但拒绝真正旧的库,例如 2001?链接器是否会对太新的版本感到不安?
  2. 有什么方法可以判断 libgcc_so 是什么版本?
  3. 我可以通过创建符号链接作弊并强制它使用当前安装的版本吗?如果是这样,我应该创建什么符号链接?

感谢您阅读并提出任何建议。

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

哇。我觉得很傻。我需要做的就是通过将我的命令更改为

来指定要使用的特定版本的 g++
/usr/sfw/bin/g++ testing.cpp

哒哒!程序编译成功 运行s。

如果其他人遇到此问题,运行 which 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++