ld.so.1:协议:致命:libstdc++.so.6:在 Solaris 11 中找不到版本“GLIBCXX_3.4.20”

Posted

技术标签:

【中文标题】ld.so.1:协议:致命:libstdc++.so.6:在 Solaris 11 中找不到版本“GLIBCXX_3.4.20”【英文标题】:ld.so.1: protoc: fatal: libstdc++.so.6: version 'GLIBCXX_3.4.20' not found in Solaris 11 【发布时间】:2018-01-31 14:08:00 【问题描述】:

我在我的 solaris 11 中安装了 protobuffer,现在生成 addressbook.pb.h 和 addressbook.pb.cc 文件,我给出了下面的命令

protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto

但我没有得到想要的文件,而是得到了以下错误:

ld.so.1: protoc: fatal: libstdc++.so.6: version 'GLIBCXX_3.4.20' not found (required by file /export/home/shivamv/Downloads/PROTO_BUFF/protobuf-master/src/.libs/libprotobuf.so.15)
 ld.so.1: protoc: fatal: libstdc++.so.6: open failed: No such file or directory

我通过以下命令检查了 libstdc++.so.6:

strings /usr/lib/libstdc++.so.6 | grep GLIBCXX

所以我得到了这个输出:

GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGT

请帮我解决这个问题:)

【问题讨论】:

【参考方案1】:

这可能不是最好的解决方案,但是您可以告诉运行时链接器忽略共享库版本。

export LD_NOVERSION=1

但它对我有用。

【讨论】:

【参考方案2】:

其实很简单。

致命:libstdc++.so.6:找不到版本“GLIBCXX_3.4.20”

所有信息都在告诉您,您需要 GLIBCXX,特别是版本 3.4.20(它可能支持 更高版本),但事实并非如此已安装。

libstdc++ 只是标准 C++ 库,它包含实际的 GLIBCXX 库。它只知道你需要那个库 - 或者特别是 libprotobuf 需要 - 但它没有找到它。


现在,我在 Linux 上工作,个人不知道如何在 Solaris 上安装任何东西。 看来 GLIBCXX 是 GLIBC 的一部分,which apparently needs to be built from source。但是,就像我说的,我并不特别了解 Solaris,所以我可能在这方面是错误的。

【讨论】:

CodeMouse92 :不是 glibc,而是 (gnu)lib(std)cxx → libstdc++。 GLIBCXX_3.4.20 是 gcc libstdc++ 中的一个对象,从版本 4.9.0 ( libstdc++.so.6.0.20 ) 请尝试$ objdump -x /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.20

以上是关于ld.so.1:协议:致命:libstdc++.so.6:在 Solaris 11 中找不到版本“GLIBCXX_3.4.20”的主要内容,如果未能解决你的问题,请参考以下文章

未从 libstdc++.a(libstdc++.so.6) 导出对“_ZNSt5__padIcSt11char_traitsIcEE6_S_padERSt8ios_basecPcPKcllb”符号的

XGBoost遇到“Error message(s): [“/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20‘”错误解决案例

Qt编译时MinGW去掉对gcc动态库的依赖(去掉对libgcc_s_dw2-1.dll,libstdc++-6.dll的依赖)

致命:协议错误:行长字符错误:Pa

“致命错误:在展开可选值时意外发现 nil”,同时调用协议方法

javax.net.ssl.SSLException:收到致命警报:带有 Selenium 的协议版本