общие библиотеки — Невозможно запустить исполняемый файл проекта C ++ ZMQ в 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, который был установлен.

0

Решение

После некоторого поиска я обнаружил, что моя библиотека 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» вызвало проблему. Это испортило половину моего дня.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]