Я пытаюсь выяснить, могу ли я создать статическую библиотеку, которая скрывает все свои внутренние объекты и функции и т.д., за исключением интерфейсов, которые я хочу экспортировать. Я экспериментирую с Xcode (gcc 4.2).
Я использовал атрибут __attribute__((visibility("hidden")))
для некоторых классов С++ для этой документации. Я также определил небольшие вспомогательные функции C как локальные файлы (статические) и т.д.
Однако, когда я запускаю strings
в результирующем файле .a библиотеки, даже когда он скомпилирован в конфигурации Release, я все еще вижу имена моих якобы скрытых классов с именами их методов и даже именами файлов, там также располагаются локальные функции.
Я добавил -fvisibility=hidden
и даже -fno-rtti
в gcc-флаги. Хотя это уменьшает некоторые строки, имена классов, имена методов и имена статических функций все еще находятся в простой или искаженной форме.
Есть ли надежный способ заставить компилятор построить этот материал, не имея строковых имен всех внутренних элементов, выпущенных в двоичный файл? Не обязательно, чтобы для любых внешних клиентов были ссылки.
(Чтобы уточнить: я спрашиваю об обфускации внутренних имен, а также об обязательных требованиях к привязке экспорта. Я смущен, что все внутренние работы видны с помощью команды strings
, независимо от того, формально ли эти символы экспортированы или нет.)
Спасибо.