LINUX.ORG.RU

Не запускается бинарник в OpenWrt: can't resolve symbol

 , , ,


0

1

Доброго времени суток. Пытаюсь кросскомпилировать в Убунте под OpenWrt и запустить в последнем megatools (консольные утилиты для заливки файлов в облако mega.cz), удалось собрать нормально устанавливаемый ipk-пакет, но при попытке запустить любую из утилит выдаётся:

root@OpenWrt:/tmp# megals
megals: symbol '__stack_chk_guard': can't resolve symbol
megals: symbol '__stack_chk_fail': can't resolve symbol
Вчера ещё перед этим падало с ошибкой, что не удаётся подгрузить библиотеку libc.so (в /lib/ лежит только libc.so.0). При создании символическую ссылки libc.so, указывающую на libc.so.0 или на uclibc-<...>.so, также выдавалась вышеприведённая ошибка. Если правильно понимаю, ругается на то, что не может найти в библиотеках эти символы при загрузке бинарника. Но откуда эти символы вообще взялись? Путём objdump –T <бинарник> | grep stack просмотрел «зависимости», ну не числится там нигде этих функций. Не числится как в самих бинарниках, так и ни в одной из подгружаемых библиотек (список подгружаемых библиотек смотрел через ldd). В исходниках megatools этих функций тоже не упоминается.
Ещё безуспешно пытался отключить проверку стека (за неё ведь эти функции отвечают?) ключом компилятора -fno-stack-protector

С кросскомпилятором всё в порядке – HelloWord компилируется и запускается (я ведь правильно думаю, что если были бы проблемы с libc, тогда б функции stdio.h не работали?), тест glib2 тоже работает (работа со списком GSList).

(Добавлено)
Прояснилось уточнение – проблема, похоже, кроется в glib2, причём только в двух его библиотеках: gio и gobject. Стоит прилинковать хотя бы одну из двух этих библиотек к HelloWorld (даже не подключая ничего в коде), так HelloWorld перестаёт запускаться с вышеописанной ошибкой. Остальные 3 библиотеки подключаются нормально. Ещё раз перепроверил отсутствие этих якобы «недостающих» функций в зависимостях. В чём причина? Такое ведь наблюдается как с самостоятельно собранной версией, так и с версией с репозитория.



Последнее исправление: SVG (всего исправлений: 1)

Похоже, в системе установлено несколько версий какой-то либы, и из-за зависимостей загружается не та версия. Начать можно с

ldd `which megals`

И дальше идти ldd по зависимостям, пока не найдется, кому надо libxxx.so.X, и при этом, через непрямые зависимости надо ещё и libxxx.so.Y.

alt-x ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.