运行 无法在 linux 上执行 C++ ZMQ 项目

Cannot run executable of C++ ZMQ project on linux

我正在尝试 运行 示例 C++ ZMQ 客户端。代码用 g++ 编译得很好,但我不能 运行 生成的可执行文件,因为出现以下错误。

./pairserver.out: /opt/Xilinx/Vivado/2016.1/lib/lnx64.o/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./pairserver.out)
./pairserver.out: /opt/Xilinx/Vivado/2016.1/lib/lnx64.o/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/lib/libzmq.so.5)
./pairserver.out: /opt/Xilinx/Vivado/2016.1/lib/lnx64.o/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/local/lib/libzmq.so.5)
./pairserver.out: /opt/Xilinx/Vivado/2016.1/lib/lnx64.o/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /usr/local/lib/libzmq.so.5)
./pairserver.out: /opt/Xilinx/Vivado/2016.1/lib/lnx64.o/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /usr/local/lib/libzmq.so.5)

我使用下面的命令来编译代码

g++ pairserver.cpp -o pairserver.out -lzmq

这是源代码

//  file: main.cpp
//  Hello World client in C++
//  Connects REQ socket to tcp://localhost:5555
//  Sends "Hello" to server, expects "World" back
//
#include <zmq.hpp>
#include <string>
#include <iostream>

int main ()
{
    //  Prepare our context and socket
    zmq::context_t context (1);
    zmq::socket_t socket (context, ZMQ_REQ);

    std::cout << "Connecting to hello world server…" << std::endl;
    socket.connect ("tcp://localhost:5555");

    //  Do 10 requests, waiting each time for a response
    for (int request_nbr = 0; request_nbr != 10; request_nbr++) {
        zmq::message_t request (5);
        memcpy (request.data (), "Hello", 5);
        std::cout << "Sending Hello " << request_nbr << "…" << std::endl;
        socket.send (request);

        //  Get the reply.
        zmq::message_t reply;
        socket.recv (&reply);
        std::cout << "Received World " << request_nbr << std::endl;
    }
    return 0;
}

估计安装的Vivado 2016共享库之间存在一些冲突。

经过一些挖掘,我发现我的 libstdc+ 库以某种方式链接到第三方 libstdc+ 库(来自 Vivado)。我使用 ldd 命令查找链接库,结果如下。

linux-vdso.so.1 (0x00007ffda7997000)
libzmq.so.5 => /usr/local/lib/libzmq.so.5 (0x00007f0d9679b000)
libstdc++.so.6 => /opt/Xilinx/Vivado/2016.1/lib/lnx64.o/libstdc++.so.6 (0x00007f0d96499000)
libgcc_s.so.1 => /opt/Xilinx/Vivado/2016.1/lib/lnx64.o/libgcc_s.so.1 (0x00007f0d96283000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d95e92000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f0d95c8a000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0d95a6b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0d956cd000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0d96c23000)

谷歌搜索问题,我最终使用了以下命令

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/Xilinx/Vivado/2016.1/lib/lnx64.o:/usr/lib/x86_64-linux-gnu

但是,它没有用。我很生气不再以温和的方式处理这个问题。 我已将 /opt/Xilinx/Vivado/2016.1/lib/lnx64.o 重命名为其他名称,我的代码 运行 完全没问题。 那个愚蠢的软件 'Vivado'导致了问题。它毁了我半天的时间。