Потребовалось запустить hasp на uClibc. Бинарник драйвера (aksusbd) динамически скомпонован с glibc, пример использования API статически компонуется с бинарными библиотеками, которые тоже имеют ссылки на функции glibc, которых нет в uClibc. Я имею очень смутные понятия о программировании и ковырялся следующим образом.
ldd aksusbd
libpthread.so.0 => /lib/libpthread.so.0
libc.so.6 => not found
libc.so.0 => /lib/libc.so.0
/lib/ld-uClibc.so.0 => /lib/ld-uClibc.so.0
Нет libc.so.6, делаю ссылку libc.so.6=>libc.so.0. Пытаюсь запустить:
./aksusbd: No such file or directory.
Ладно, копаю дальше, лезу в aksusbd, нахожу там /lib/ld-linux.so.2, ага, нет линковщика, делаю ссылку /lib/ld-linux.so.2=>ld-uClibc.so.0.
Пытаюсь запустить -
./aksusbd: can't resolve symbol '__libc_start_main' in lib './aksusbd'.
Копаюсь в исходниках uClibc, похоже, что аналогичная функция - __uClibc_main. Правлю бинарник (меняю __libc_start_main на __uClibc_main). Опять пытаюсь запустить:
./aksusbd: can't resolve symbol '__register_frame_info' in lib './aksusbd'.
Ищу, что за __register_frame_info, оказывается в libgcc.a. Собираю библиотечку c этой функцией:
gcc -shared -Wl,-soname,libc.so.6 -o libc.so.6 -u__register_frame_info
Запускаю, загружается. :) Остаётся собрать приложение и проверить.
make haspdemo - не находит ссылок на __strtoul_internal, __strtol_internal, __fxstat и __fstat. Надо бы чем-то их подменить. Пишу fake-glibc.c следующего содержания:
-------------------------
#include <sys/stat.h>
#includе <stdlib.h>
void *__strtoul_internal = &strtoul;
void *__strtol_internal = &strtol;
void *__xstat = &stat;
void *__fxstat = &fstat;
-------------------------
Собираю:
gcc fake-glibc.c -L. -c -o fake-glibc.o
Добавляю в Makefile в правила для сборки haspdemo fake-glibc.o. "make haspdemo" отрабатывает, haspdemo работает.
Теперь вопрос. Как всё это сделать правильно?
Ответ на:
комментарий
от Eshkin_kot
Ответ на:
комментарий
от manntes
Ответ на:
комментарий
от qwe
Ответ на:
комментарий
от qwe
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от manntes
Ответ на:
комментарий
от manntes
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от qwe
Ответ на:
комментарий
от mky
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [ARM][uClibc] Cannot resolve symbol 'open64' (2010)
- Форум _rtld_global_ro@GLIBC_PRIVATE (2005)
- Форум Компилирование GLibc (2005)
- Форум Я его совсем сломал? (2005)
- Форум Не запускается бинарник в OpenWrt: can't resolve symbol (2015)
- Форум glibc 2.4 Помогите поставить (2006)
- Форум GCC, can't resolve symbol (2009)
- Форум Проприетарная программа (2011)
- Форум FC5 и Oracle 8.1.7, Установка Oracle (2006)
- Форум Проблема: линковка статических библиотек redhat73 в FreeBSD (2007)