Я использую VS-android framework для компиляции общего объекта Android непосредственно из Microsoft Visual Studio 2012 + Android NDK. Я разобрал свой собственный .so-файл с использованием IDA и был в ужасе, увидев, что весь мой код полностью виден (имена функций, имена буферов данных, имена классов и т. Д.).Как удалить символы из .so-файла во время сборки
Я хочу удалить все отладочные и ненужные символы, поэтому было бы сложно понять мой код, разобрав его.
процесс Компиляции следующим образом:
- У меня есть 10 C++ файлов. Каждый из них скомпилирован в файл .o
- main_service.c скомпилирован в main.o и связан со всеми другими * .o-файлами, чтобы получить библиотеку main_service.so.
Я попытался следующие решения, и они не работали:
- Давать аргумент -strip-все для компилятора и компоновщика. Кажется, это не работает.
- После связывания вызовите objcopy.exe с помощью -strip-all на main_service.o. Это немного уменьшает размер main_serivce.so, но символы остаются
- В моем коде на C++ я никогда не использую атрибут ((видимость())) «так, может быть, проблема в том, что компоновщик не может удалить символы, потому что он не знать, что является частным, и может быть скрытым и общедоступным. Я попытался добавить атрибут «» ((видимость («по умолчанию»))) »к функциям в main_service.c, которые я хочу использовать в JNI, и добавил -fvisibility = скрытые флаги в компилятор и компоновщик. Но у меня есть предупреждение: атрибут «видимости» игнорируется [-Wattributes], а символы не удаляются
Что мне здесь не хватает?
P.s. - Я совершенно не знаком с «снятием символов», поэтому извините, если мой вопрос немного глуп.
-
Привет, как я могу сделать то же самое с вовлеченным CMake. И эта команда также уменьшает размер .so-файла? –