MacOs 10.6, bir dosyayı içeren "unwanted.c" varsa:GERÇEKTEN MacOs
class secret_thing {
public:
secret_thing() {}
void revealing_method_name() {}
};
main()
{
secret_thing obj;
obj.revealing_method_name();
}
Şimdi biliyorum:
$ g++ unwanted.c -o unwanted
$ strip unwanted
$ nm unwanted | grep secret
0000000100000eb8 T __ZN12secret_thing21revealing_method_nameEv
0000000100000eae T __ZN12secret_thingC1Ev
dışarı bölerseniz C++ kodu yazarken çoğu kişi yaptığı gibi, gizli sınıfın arayüzü ve uygulanması, sonra soyulmuş yürütülebilir dosyasında istenmeyen semboller yoktur. Ne yazık ki, binlerce satırlık kodun mevcut bir kod tabanını kullanıyorum ve bu benim seçimlerimden biri değil.
Vahşi bir tahmin olarak -fno-rtti'yi denedim ve bu hiçbir şeyi düzeltmedi. Google tanrılarına dua ettim ve kulüpleri yayınlamak için birçok referans buldum, ancak hiçbir yararlı bağlantı yoktu. Adam sayfalarını macda strip, g ++ ve ld için eğittim ve denemek için açık bir şey yoktu, "özel örnekler" ifadesi ilgi çekiciydi, bununla ilgili ne yapacağımı anlayamadım.
[update] Ne yazık ki, küçük bir örnek oluşturma girişimi ile ilgili bir sorun ortaya çıkıyor. İşte, gerçek problemin ne olduğuna daha yakın olan, daha da optimize edilmiş bir yapı ise, hala istenmeyen sembollere sahip olan daha karmaşık bir örnek.
Kötü örnekler için özür dilerim. En küçük gerçek problemi bulmak zor olduğu ortaya çıkıyor. Cevaplar için çok teşekkürler, ancak her cevap bir çözüme yaklaştı.
Bu istendiği gibi çalışmıyor gibi görünüyorclass 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();
}
Gönderilen yanlış kod vardı. Doğru örnek kod, şimdi okuduğu gibi, sınıf tanımı INSIDE yöntemlerinin uygulanmasıyla birlikte, diyor ki: strip::/Users/michael. oyuncak/istenmeyen __ZN12secret_thing21revealing_method_nameEv __ZN12secret_thingC1Ev – mtoy
Ancak cevap daha yararlı oldu, çünkü bana daha fazla google yem verdi, bu hata dizisi daha ilginç araştırma alanlarını açığa çıkardı. – mtoy