Когда я включаю разделяемую библиотеку, мой исполняемый файл ищет две ее версии

Когда я делаю свою программу с -larmadilloЯ получаю исполняемый файл, который хочет две его версии:

$ ldd ./a.out | grep armadillo
$ libarmadillo.so.7 => /usr/lib/x86_64-linux-gnu/libarmadillo.so.7 (0x00007fd5e29a0000)
$ libarmadillo.so.4 => not found

Может кто-то указать мне верное направление? Это не имеет никакого смысла для меня!

Предыстория: я изначально установил libarmadillo через sudo apt-get install libarmadillo-devЗатем я понял, что мне нужно создать его с определенным параметром (64-битные слова включены), поэтому я удалил его через sudo apt-get remove libarmadillo-dev Затем скачали последнюю версию, настроили и сделали / установили ее. Предположительно у меня есть только одна версия libarmadillo в моей системе — я не вижу никаких старых библиотек в обычных местах.

Спасибо

РЕДАКТИРОВАТЬ:

Мой Makefile это:

CC= g++
CFLAGS= -Lcontrib/armadillo-7.400.1 -L/usr/include -Lcontrib/mlpack-2.0.1/build/lib -fpermissive -std=c++11 -O0 -g -Wall
LDFLAGS= -lmlpack -larmadillo

Думаю, подробный вывод ldd интересен?

$ ldd -v ./a.out | grep armadillo
$ libarmadillo.so.7 => /usr/lib/x86_64-linux-gnu/libarmadillo.so.7 (0x00007fd5e29a0000)
$ libarmadillo.so.4 => not found
$ /usr/lib/x86_64-linux-gnu/libarmadillo.so.7:

Последний раздел (в котором перечислены зависимости для libarmadillo.so.7):

/usr/lib/x86_64-linux-gnu/libarmadillo.so.7:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6

В подробном выводе нет упоминания о «отсутствующем» libarmadillo.so.4, что я нахожу довольно странным.

0

Решение

Я думаю, что я понял это, но результаты не особенно утешительны.

Я переустанавливал mlpack который имеет зависимость в libarmadillo, а затем перестроен, и требование для libarmadillo.so.4 ушел

Процесс, который, я думаю, произошел, это я:

  • Установлена ​​старая версия libarmadillo
  • Установлены libmlpack настроен со старой версией
  • Понял, что мне нужна более новая версия libarmadilloтак удалил старую libarmadillo и установил новый.
  • Восстановить mlpack с помощью cmake / make но не сделал make install
  • Сделал мой исполняемый файл
  • Теперь есть исполняемый файл, который указывает на mlpack который требует старого libarmadillo, но это также указывает на новый libarmadillo

Однажды я make install перестроен mlpack, мои проблемы уходят. Я удивлен, что подробный вывод ldd не пометить причину Зачем это искал libarmadillo.so.4 (а именно, что была зависимость от libmlpack на старой библиотеке) — следует ldd быть в состоянии сделать это?

0

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

Иногда linux создает множество символических ссылок одной динамической библиотеки. Я не знаю почему, но, тем не менее, для этого нет неудобств. Итак, вы можете просто создать новую символическую ссылку, например: ln -s path_to_my_so_lib / my_lib.so /usr/lib/x86_64-linux-gnu/libarmadillo.so.4

-1

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