Ваша проблема не найдена в библиотеке. Дело в том, что в вашей библиотеке отсутствует символ, которого ожидали. Есть большая вероятность, что у вас просто установлена неверная версия библиотеки. Что вы хотите сделать, это выполнить следующее:
# You will need the full path if you are not in that directory...
objdump -Tt /home/dbt/rosis_workspace/soss/install/soss-dds/lib/libsoss-dds.so | \
grep -w _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE
Вы, вероятно, увидите что-то вроде:
0000000000000000 DF *UND* 0000000000000000 _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE
Это правильно, но это означает, что этот символ не определен в этомбиблиотека, но она ожидает найти его в одной из библиотек, которые ldd
перечислены для вас. Мое первое предположение было бы libsoss-core.so
, но мы ищем несовместимые версии, и эта библиотека, похоже, имеет тот же корневой каталог, что и libsoss-dds.so
, поэтому эти версии обязательно должны быть совместимы. Если вы хотите увидеть, содержит ли библиотека определенный символ, просто запустите objdump
, как я делал выше. После быстрого поиска в Интернете этого символа библиотеки меня перевели на страницу github для ros2
. Это наводит меня на мысль, что библиотека преступников на самом деле libfastrtps.so.1
. Если вы выполните следующее:
objdump -Tt /home/dbt/ros2_ws/src/eProsima/install/fastrtps/lib/libfastrtps.so.1 | \
grep -w _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE
и библиотека содержала символы, которые ищет libsoss-dds.so
, это будет ваш результат:
0000000000002cc0 g DF .text 0000000000000011 Base _ZTVN8eprosima8fastrtps28DisablePositiveACKsQosPolicyE
, но потому что вы пропустите этосимвол, вы не получите никаких результатов.
Таким образом, ваша проблема сводится к несовместимым библиотекам с 1 из 2 решений. Вы можете найти старый / новый источник для libfastrtps.so
или более старый / новый источник для libsoss-dds.so
. В идеале, если эти пакеты доступны через менеджер пакетов вашего дистрибутива, используйте его, чтобы сделать работу за вас.