找不到GLIBCX_3.4.21

时间:2016-07-03 07:21:06

标签: linux gcc zeromq zerorpc

如果这不是正确的地方,我很抱歉,但在处理同样的错误2天之后,我希望有人能得到答案。

我正在尝试使用节点模块 zerorpc ,它使用 zmq ,但是,当尝试运行一个小例子时,我收到以下错误:

Error: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by myFilepath/node_modules/zmq/build/Release/zmq.node)

我正在使用AWS提供的amazon linux实例(亚马逊网络服务)。执行sudo yum update后,可用的最新版本为GLIBCXX_3.4.19。我使用以下命令检查:

strings /usr/lib64/libstdc++.so.6.19 | grep GLIBCXX
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

最初,我使用brew install zmq收到此错误,因此我将其卸载并尝试按照zeromq site's instructions安装zmq:

git clone https://github.com/zeromq/libzmq
./autogen.sh && ./configure && make -j 4
make check && make install && sudo ldconfig

我对这些说明的唯一区别是我单独运行它们而不是使用&&,我在每个指令前添加了sudo。 在运行这些之前我还执行了export LD_LIBRARY_PATH=/usr/local/lib

然后我做了npm install zerorpc --save。 当然,我收到了同样的错误,所以我卸载了 zerorpc ,做了make clean,并开始了所有的步骤,除了这次我将配置指令更改为sudo ./configure CXX=/usr/bin/g++ CC=/usr/bin/gcc 。而且,我收到了同样的错误。

希望有人有个建议。 我真的不想尝试从源代码编译一个更新的gcc版本,因为我知道这只会是新一轮的头痛。

3 个答案:

答案 0 :(得分:1)

用更高版本替换libstdc ++(。so.6)将阻止c ++编译器工作。但是,根据libstdc++.so.6的更高版本运行应用程序没有问题。示例:libstdc ++。so.6.0.21 https://drive.google.com/file/d/0B7S255p3kFXNNTIzU2thRlZmYVE/view?usp=sharing

或者作为包,libstdc ++ - 5.1.0-1.el7.x86_64.rpm https://drive.google.com/file/d/0B7S255p3kFXNVFljeEFXV3d6RlU/view?usp=sharing(#rpm -Uvh --force --nodeps [package])注意:您需要执行rpm -Uvh --force libstdc++-4.8.5-4.el7.x86_64.rpm来替换外包使用默认值http://mirror.centos.org/centos/7.2.1511/os/x86_64/Packages/libstdc++-4.8.5-4.el7.x86_64.rpm

建议:使用默认的libstdc ++构建应用程序库。

编辑:我刚刚想起了使用更高版本的库启动应用程序的正确解决方案。假设您将新库设为/opt/libcxx/{libstdc++-so.6 -> libstdc++.so.6.0.21}

然后您可以执行export LD_LIBRARY_PATH=/opt/libcxx:$LD_LIBRARY_PATH && [executeable],并且/ opt / libcxx /将首先出现在LD_LIBRARY_PATH中。您可以使用上述命令创建启动脚本。就像后来的Firefox版本在CentOS 4中启动一样。

libzmq:#yum install autoconf automake libtool asciidoc xmlto libunwind-devel

您的libzmq版本(版本= 4.2.0→$ sh version.sh >> VERSION)有错误。

然而," v4.1.6"没问题:git clone https://github.com/zeromq/zeromq4-1.git

包,来自编辑过的libzmq / packaging / redhat / libzmq.spec:zeromq-4.1.6-1.el7.centos.x86_64.rpm https://drive.google.com/file/d/0B7S255p3kFXNYllfbUhjd0c5Qm8/view?usp=sharing ...和zeromq-devel-4.1.6-1.el7.centos.x86_64.rpm https://drive.google.com/file/d/0B7S255p3kFXNNExVMkpxQzlxcWc/view?usp=sharing

这些套餐提供/usr/bin/curve_keygen/usr/lib64/{libzmq.so.5 -> libzmq.so.5.0.1 <- libzmq.so, libzmq.a}

编辑:构建zerorpc:git clone https://github.com/0rpc/zerorpc-python.git

# yum install python-devel python-setuptools ... cd zerorpc-python/; #python(27) setup.py install

答案 1 :(得分:1)

我没有必要&#34;修复&#34;问题,但我确实找到了解决方案。 由于我使用AWS,我启动了一个Ubuntu实例(与我最初使用的Amazon Linux实例相比),并将项目移动了。

这样做的原因是因为Ubuntu使用不同的包管理器。 更新并安装所有基本的东西来运行项目后,我实际上再次遇到了完全相同的错误。

然后我运行了以下命令,错误就消失了:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

这些命令是在另一个stackoverflow post中建议的。

我不会将此标记为已接受的答案,因为转移到不同的发行版可能对大多数人来说不是一个可行的解决方案。

答案 2 :(得分:0)

我离开这里是我的解决方案。即使问题来自一个不同的框架,也许我的解决方案可能会给你一些想法。

我的Matlab在其根路径中链接到其libstdc++.so.6库,而不是系统库。它是我使用gstream lib执行的任务的旧版本。所以,我已经重命名了Matlab的.so文件,强制使用Matlab链接系统版本。

我想这个话题已经解决了,但我在这里写下了我的经验,以防它可以帮助其他人。