5

如果这不是正确的地方,我深表歉意,但在处理同样的错误 2 天后,我希望有人能给出答案。

我正在尝试使用使用zmq的节点模块zerorpc,但是,在尝试运行一个小示例时,出现以下错误:

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

我正在使用 AWS(亚马逊网络服务)提供的亚马逊 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 站点的说明安装 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 版本,因为我知道这将是新一轮的头痛。

4

3 回答 3

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 中。您可以使用上述命令创建启动脚本。就像在 CentOS 4 中启动了更高版本的 firefox 一样。



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/文件/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

于 2016-07-03T16:38:44.763 回答
1

我不一定“解决”问题,但我确实找到了解决方案。由于我使用的是 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 帖子中提出的。

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

于 2016-07-05T04:58:10.793 回答
0

我把我的解决方案留在这里。即使问题来自不同的“框架”,也许我的解决方案可以给你一些想法。

我的 Matlab 链接到它的libstdc++.so.6库,在它的根路径中,而不是系统之一。这是我使用 gstream lib 执行的任务的旧版本。因此,我重命名了 Matlab 的 .so 文件,以强制针对系统版本进行 Matlab 链接。

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

于 2018-02-26T07:33:41.540 回答