MacOs 10.6, если у меня есть файл "unwanted.c", который содержит:Как РЕАЛЬНО зачищать двоичный в MacOs
class secret_thing {
public:
secret_thing() {}
void revealing_method_name() {}
};
main()
{
secret_thing obj;
obj.revealing_method_name();
}
Сейчас я:
$ g++ unwanted.c -o unwanted
$ strip unwanted
$ nm unwanted | grep secret
0000000100000eb8 T __ZN12secret_thing21revealing_method_nameEv
0000000100000eae T __ZN12secret_thingC1Ev
Если я разделил вне интерфейс и реализация секретного класса, как это делает большинство людей при написании кода на C++, тогда в лишенном исполняемом файле нет ненужных символов. К сожалению, я получил существующую кодовую базу из многих тысяч строк кода, и это не один из моих выборов.
Я пробовал -fno-rtti, как дикое предположение, и это ничего не исправить. Я молился богам Google и нашел много ссылок на стриптиз-клубы, но никаких полезных ссылок. Я снял man-страницы для strip, g ++ и ld на mac, и не было никаких очевидных вещей, чтобы попробовать, хотя фраза «private externs» была интригующей, я не мог понять, что с этим делать.
[обновление] К сожалению, проблема заключается в попытке сделать небольшой пример. Вот более сложный пример, который ближе к реальной проблеме, которая по-прежнему имеет нежелательные символы, если она построена оптимизированной.
Извиняюсь за плохие примеры. Трудно найти наименьшую актуальную проблему. Большое спасибо за ответы, хотя каждый ответ подталкивает меня к решению.
class base {
public:
virtual int revealing_method_name() = 0;
virtual ~base() {};
};
class secret_thing : public base {
public:
int revealing_method_name() { return 0; };
};
class other_thing : public base {
public:
int revealing_method_name() { return 1; };
};
int main(int argc, char**)
{
base *object = 0;
if(argc > 1) object = new secret_thing;
else object = new other_thing;
return object->revealing_method_name();
}
У меня был неправильный код. В правильном примере кода, как теперь читается вопрос, с реализацией методов INSIDE определение класса, strip говорит: strip: символы, на которые ссылаются записи косвенного символа, которые нельзя удалить:/Users/michael. игрушка/нежелательная __ZN12secret_thing21revealing_method_nameEv __ZN12secret_thingC1Ev – mtoy
однако ответ был весьма полезен, так как он дал мне больше фуража Google, эта строка ошибок раскрывает еще несколько интересных областей исследования. – mtoy