clang: удаление имен классов из вывода

Я строю свой проект на C ++, используя clang++, используя следующую команду командной строки (разбить на строки):

clang++
-std=c++11
-W -Wall -Wextra -pedantic -Wno-newline-eof -Werror
-O4
-I<dirs>
-L<dirs>
-l<libs>
-framework <frameworks>
-D <defs>
-o <filename>
<files>

Тем не менее, когда я бегу strings <filename>несколько имен классов отображаются, несмотря на -O4 в командной строке. я пробовал -Wl,-s который должен сказать llvm убрать все символы, но это не удаляет их.

Кажется, что имена классов, которые появляются, имеют одну общую черту: у них есть vtable. Один из этих классов:

class MyClass {
public:
virtual void myFunc() = 0;
};

Это отображается как символ:

N9namespace7MyClassE

Мне не нравится, что мое пространство имен и имена классов отображаются в конечном файле. Как мне их раздеть? Мой бинарный файл — это утилита командной строки, поэтому только main Функция должна быть экспортирована.


Даже после поставки -fno-rtti (как предложено @ n.m.), некоторые имена все еще остаются, такие как:

__ZN15MyClassInstance6myFuncEv

(MyClassInstance является подклассом MyClass выше)

Кроме того, даже имена глобальных переменных находятся в двоичном виде.

1

Решение

Я решил это, предоставив аргумент лязг -fno-rtti, который отключает RTTI, функцию C ++, которую я в любом случае не использую.

[редактировать] Это выглядит как -O4 не подразумевает stripи последние несколько ссылок на мои имена классов можно удалить, выполнив strip,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]