Библиотека Rabbitmq-c не подключается динамически в Debian 8

Цель: сделать Rabbitmq-c динамически связанным через gcc (https://github.com/alanxz/rabbitmq- в).

Проект называется storeman:

#include <stdarg.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <amqp_tcp_socket.h>
#include <amqp.h>
#include <amqp_framing.h>
#include <assert.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>

int main(int argc, char const *const *argv)
{
    amqp_connection_state_t conn;
    conn=amqp_new_connection();
    exit(0); //Everything else is deleted for testing
}

<сильный>1. Загрузите, скомпилируйте и установите библиотеку.

В новой папке build внутри пути загрузки rabbitmq-c:

сделай ..

cmake --сборка .

cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..

сделать

сделать установку

Наконец, он делает следующий успешный вывод:

[ 15%] Built target rabbitmq
...
[100%] Built target test_tables
Install the project...
-- Install configuration: "Release"
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/pkgconfig/librabbitmq.pc
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/librabbitmq.so.4.2.1
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/librabbitmq.so.4
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/librabbitmq.so
-- Up-to-date: /usr/local/lib/x86_64-linux-gnu/librabbitmq.a
-- Up-to-date: /usr/local/include/amqp.h
-- Up-to-date: /usr/local/include/amqp_framing.h
-- Up-to-date: /usr/local/include/amqp_tcp_socket.h
-- Up-to-date: /usr/local/include/amqp_ssl_socket.h

Файлы библиотеки устанавливаются в

  • /usr/local/lib/x86_64-linux-gnu/ (librabbitmq.so и librabbitmq.so.4 указывают как ссылки на librabbitmq.so.4.2.1, и есть librabbitmq.a)

  • /usr/local/include/, где находятся все необходимые заголовочные файлы (amqp.h amqp_framing.h amqp_ssl_socket.h amqp_tcp_socket.h)

<сильный>2. Используйте gcc.

gcc -Wall -I/usr/local/include -L/usr/local/lib/x86_64-linux-gnu -o storeman storeman.c -lrabbitmq

GCC выходит с:

error while loading shared libraries: librabbitmq.so.4: cannot open shared object file: No such file or directory

В то же время он может быть успешно скомпилирован как статический, используя librabbitmq.a, что меня очень смущает... Буду очень признателен за любую помощь.


person Eugene Zakharenko    schedule 27.08.2017    source источник
comment
Вероятно, вам нужно изменить переменную LD_LIBRARY_PATH. Каков ваш результат echo $LD_LIBRARY_PATH?   -  person vonaka    schedule 27.08.2017
comment
Это потрясающе. Статический компилируется с помощью gcc -static -Wall -I/usr/local/include -L/usr/local/lib/x86_64-linux-gnu -o storeman storeman.c -lrabbitmq без проблем, но динамический не может линковаться без LD_LIBRARY_PATH set... Ответ ваш: LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu вместо /usr/local/lib, что для меня очень странно.. Но я новичок в написании C для Linux. Большое спасибо!!!   -  person Eugene Zakharenko    schedule 27.08.2017


Ответы (1)


Мне кажется, что проблема может заключаться в том, что в файле /etc/ld.so.conf.d/rabbitmq.conf отсутствует подкаталог .../lib/... в его содержимом. Когда я обновляю содержимое этого файла до этого, он работает для меня (находит общую библиотеку rabbitmq):

/usr/local/lib/x86_64-linux-gnu 

Обратите внимание: запустите sudo ldconfig после сохранения изменений.

Похоже, это ошибка установки RabbitMQ git — я клонировал и построил из мастера ветки 22 февраля 2018 года на Ubu-17.

person John Thompson    schedule 02.03.2018
comment
Было не очень понятно - извините - клон git был таким: git clone github.com /alanxz/rabbitmq-c.git ... это rabbitmq-c, а не rabbitmq! - person John Thompson; 02.03.2018