(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.6
和 4.3.3
。
我看到 /usr/local/lib/libcc_s.so
的符号链接指向 2001 年创建的 libgcc_s.so.1
...
我在别处看到过以下检查版本的方法,但是returns什么都没有:
/usr/local/lib>strings libgcc_s.so.1 | grep GCC
我的问题是:
- 到底是怎么回事?链接器是否接受 "kinda old" 库但拒绝真正旧的库,例如 2001?链接器是否会对太新的版本感到不安?
- 有什么方法可以判断 libgcc_so 是什么版本?
- 我可以通过创建符号链接作弊并强制它使用当前安装的版本吗?如果是这样,我应该创建什么符号链接?
感谢您阅读并提出任何建议。
我怀疑 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++
我第一次尝试在这台机器(不是我的机器)上编译 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.6
和 4.3.3
。
我看到 /usr/local/lib/libcc_s.so
的符号链接指向 2001 年创建的 libgcc_s.so.1
...
我在别处看到过以下检查版本的方法,但是returns什么都没有:
/usr/local/lib>strings libgcc_s.so.1 | grep GCC
我的问题是:
- 到底是怎么回事?链接器是否接受 "kinda old" 库但拒绝真正旧的库,例如 2001?链接器是否会对太新的版本感到不安?
- 有什么方法可以判断 libgcc_so 是什么版本?
- 我可以通过创建符号链接作弊并强制它使用当前安装的版本吗?如果是这样,我应该创建什么符号链接?
感谢您阅读并提出任何建议。
我怀疑 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++