2013-07-30 4 views
3

Я использую VS-android framework для компиляции общего объекта Android непосредственно из Microsoft Visual Studio 2012 + Android NDK. Я разобрал свой собственный .so-файл с использованием IDA и был в ужасе, увидев, что весь мой код полностью виден (имена функций, имена буферов данных, имена классов и т. Д.).Как удалить символы из .so-файла во время сборки

Я хочу удалить все отладочные и ненужные символы, поэтому было бы сложно понять мой код, разобрав его.

процесс Компиляции следующим образом:

  1. У меня есть 10 C++ файлов. Каждый из них скомпилирован в файл .o
  2. main_service.c скомпилирован в main.o и связан со всеми другими * .o-файлами, чтобы получить библиотеку main_service.so.

Я попытался следующие решения, и они не работали:

  1. Давать аргумент -strip-все для компилятора и компоновщика. Кажется, это не работает.
  2. После связывания вызовите objcopy.exe с помощью -strip-all на main_service.o. Это немного уменьшает размер main_serivce.so, но символы остаются
  3. В моем коде на C++ я никогда не использую атрибут ((видимость())) «так, может быть, проблема в том, что компоновщик не может удалить символы, потому что он не знать, что является частным, и может быть скрытым и общедоступным. Я попытался добавить атрибут «» ((видимость («по умолчанию»))) »к функциям в main_service.c, которые я хочу использовать в JNI, и добавил -fvisibility = скрытые флаги в компилятор и компоновщик. Но у меня есть предупреждение: атрибут «видимости» игнорируется [-Wattributes], а символы не удаляются

Что мне здесь не хватает?

P.s. - Я совершенно не знаком с «снятием символов», поэтому извините, если мой вопрос немного глуп.

-

ответ

0

Я нашел способ сделать это.

  1. Я компилируется и связывается код с G ++. EXE (например arm-linux-androideabi-g++.exe).
  2. Для каждого скомпилированного файла я дал следующие 2 переключателя -fvisibility=hidden -s как компилятору, так и компоновщику. Вам нужны оба переключателя.
  3. Не нужно использовать __attribute visibility.
+0

Привет, как я могу сделать то же самое с вовлеченным CMake. И эта команда также уменьшает размер .so-файла? –