Ошибка поиска символа - неопределенный символ, но все символы присутствуют - PullRequest
0 голосов
/ 04 июня 2018

По-видимому, исполняемый файл не может разрешить символ в связанной библиотеке.Соответствующий вывод LD_DEBUG = libs показывает, что загружена правильная библиотека: 6557: /usr/lib/libcharon.so.0: error: symbol lookup error: undefined symbol: auth_class_names (fatal) /usr/libexec/ipsec/charon: symbol lookup error: /usr/lib/libcharon.so.0: undefined symbol: auth_class_names

nm -D показывает, что символ auth_class_names определен:

nm -D /usr/lib/libcharon.so.0|grep auth_class_names U auth_class_names

Все подсказки и идеи приветствуются

РЕДАКТИРОВАТЬ: Добавлены выходы ldd:

/usr/lib# ldd /usr/lib/libstrongswan.so
    libpthread.so.0 => /lib/arm-linux-gnueabi/libpthread.so.0 (0xb6ecd000)
    libdl.so.2 => /lib/arm-linux-gnueabi/libdl.so.2 (0xb6ec2000)
    librt.so.1 => /lib/arm-linux-gnueabi/librt.so.1 (0xb6eb3000)
    libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6d78000)
    /lib/ld-linux.so.3 (0xb6f25000)
/usr/lib# ldd /usr/lib/libcharon.so
    libm.so.6 => /lib/arm-linux-gnueabi/libm.so.6 (0xb6ea6000)
    libpthread.so.0 => /lib/arm-linux-gnueabi/libpthread.so.0 (0xb6e86000)
    libdl.so.2 => /lib/arm-linux-gnueabi/libdl.so.2 (0xb6e7b000)
    libcap.so.2 => /lib/arm-linux-gnueabi/libcap.so.2 (0xb6e70000)
    libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6d35000)
    /lib/ld-linux.so.3 (0xb6fa6000)
    libattr.so.1 => /lib/arm-linux-gnueabi/libattr.so.1 (0xb6d27000)

# nm -D /usr/lib/libstrongswan.so|grep auth_class
00036a50 D auth_class_names

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

nm -D показывает, что символ auth_class_names определен

No: он показывает, что auth_class_names равен un , определенному в libcharon.so.

libstrongswan предоставляет символ auth_class, но libcharon не ссылается на него.

Снова неверно: libcharon.so действительно ссылается на символ.

ldd /usr/lib/libstrongswan.so

Это не , что вы хотите.Вы хотите ldd /usr/lib/libcharon.so.

Скорее всего, ваша проблема в том, что ни libcharon.so, ни основной исполняемый файл не связаны с libstrongswan.so, поэтому при динамической загрузке libcharon.so, libstrongswan.so нигде не будетнайденный;следовательно, загрузка завершается неудачно с неопределенным символом.

Существует несколько возможных решений, упорядоченных от более правильных к более хакерским:

  1. Ссылка libcharon.so против libstrongswan.so.Загрузка libcharon.so загрузит все его зависимости (которые теперь будут включать libstrongswan.so, и символ будет найден).

  2. Ссылка charon бинарная против libstrongswan.so.

  3. Динамически загружать libstrongswan.so до загружать libcharon.so.
  4. LD_PRELOAD=libstrongswan.so
0 голосов
/ 05 июня 2018

На самом деле «U» означает, что этот символ не определен.Что ldd показывает на вашем libcharon.so.0?libstrongswan.so.0 - это то место, где вы должны найти auth_class_names.

...