无法在 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"导致了这个问题。它毁了我半天的时间。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 如何维护资源管理器项目视图中当前可见的项目列表
- 错误-我无法在VS2019中打开新的Qt项目
- 无法在 Linux 上运行C++ ZMQ 项目的可执行文件