Задать вопрос

Android NDK: Зафиксирован ли случай, чтобы в objcopy из Android NDK или ARM SDK работало --redefine-sym? Не известно ли, это вообще «баг» или что?

Имеется библиотека ELF, архитектуры ARM v7, требуется переименовать функцию.

1.
readelf --syms libToClone.so
Вывод:
...
     9: 00000550    55 FUNC    GLOBAL DEFAULT    7 Java_com_ourconcurrent_MainActivity_wonderFoo
...


2.
objcopy --redefine-sym Java_com_ourconcurrent_MainActivity_wonderFoo=Java_com_rou1997_MainActivity_wonderFoo libToClone.so libResult.so

Вывод:

3. Снова:
readelf --syms libResult.so
Вывод:
...
     9: 00000550    55 FUNC    GLOBAL DEFAULT    7 Java_com_ourconcurrent_MainActivity_wonderFoo
...


Мало того, что функция не переименовалась, - у файлов совпадают контрольные суммы.

Функции пробовал разные, включая "обычные" без JNIEXPORT.
Пробовал переименовать без изменения длины имени символа.
Toolchain'ы тоже разные, arm 4.9, arm 4.8 и x86.
Также пробовал не указывать имя выходного файла, чтобы сохранялось в тот же самый.
Ничего не меняется.

Попробовал другие платформы.
На UNIX - работает.
В MinGW - не работает.
OS X - TODO.

Если действительно в Android NDK это совсем не работает, то придется либо использовать декстопный Linux, то есть "не родной" toolchain, а это не совсем правильно для Android ELF, да и вообще не заработало ("Unable to recognise the format of the input file", хотя readelf работает), либо писать что-то свое для работы с ELF, а это долго.

UPD: Аналогичная проблема с GNU ARM Embedded Toolchain, только CRC меняется.

UPD #2: --strip-symbol тоже не работает нигде из перечисленных.
  • Вопрос задан
  • 320 просмотров
Подписаться 3 Средний 7 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы