Можно ли удалить символы из общей библиотеки, созданной с помощью Android NDK?

Я создаю общую библиотеку для использования в приложении Java с использованием Android NDK. С помощью readelf осмотреть lib/armeabi-v7a/libXXXlib.so файл, сгенерированный сборкой релиза, он содержит все символы (имена функций, переменных) моего родного кода C/C++.

Действительно, общий объектный файл, по-видимому, идентичен для сборок отладки и выпуска. (Единственная разница в выходе в libs папка, является ли или нет gsb.setup а также gdbserver файлы созданы.) Я переопределяю оптимизацию, установленную NDK, с помощью APP_CFLAGS += -O3 в моем Application.mk, но я не ожидаю, что сборка релиза будет генерировать символы отладки, включая -g флаг, который он делает.

Я нашел комментарий к SO, в котором говорилось: "В обоих случаях, отладке и выпуске, он оставляет флаг -g, потому что, чтобы процитировать комментарий," мы генерируем символьные версии двоичных файлов, которые позже удаляются, когда они копируются в окончательный проект. libs / directory "" и еще одно утверждение: "JNI не может найти функции для Java, если у них нет имен."

ndk-build безусловно, что-то снимает с obj/armeabi-v7a/libXXXlib.so файл, так как он намного больше, чем тот, который в конечном итоге создается в libs, но все равно кажется, что имена всех моих функций и переменных остаются нетронутыми в файле.

Требуются ли имена всех моих функций для JNI (а не только для точек входа в нативный код)?

Если нет, как я могу удалить символы, которые не нужны?

1 ответ

Решение

Не стесняйтесь установить видимость по умолчанию = скрытый и установить атрибут видимости = по умолчанию для нескольких функций, которые необходимо экспортировать (аналог DLLEXPORT) в Windows

Другие вопросы по тегам