Имеется библиотека 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
тоже не работает нигде из перечисленных.