2010-11-21 10 views
0

Ich versuche, meine Mac OS x Anwendung aller nicht benötigten Symbole zu entfernen. Wenn ich dies in meiner Linux-App mit "--strip-unneeded" tue, ist die Symboltabelle in meiner Anwendung leer und gibt nichts zurück.Kann nicht alle nicht benötigten Symbole in einer Mac OS X C++ - Anwendung entfernt werden?

Unter Mac OS X sehe ich Symbole für die Einträge typeinfo und vtable für meine Klassen sowie einige Funktionen. Soweit ich das beurteilen kann, geschieht dies bei den Funktionen, die in den Headern definiert und inline markiert sind. Nicht definierte Funktionen, die von externen Bibliotheken kommen, sind in der nm-Ausgabe vorhanden, aber mit "U" markiert.

strip -u -r myapp scheint sie nicht zu entfernen.

Der Versuch, sie in einer Datei entfernen zu setzen und zu tun: Streifen -u -r -R remove_file.txt myapp

funktioniert auch nicht. Dies ist eine monolithische Binärdatei, deren einzige gemeinsame Bibliotheksabhängigkeiten auf corfoundation und den veclib-Frameworks basieren.

Irgendwelche Vorschläge bitte?

+0

Eine andere kleine Sache, wie ich kürzlich in Apple Docs auf vecLib und vImage gelesen habe. Ich habe in http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/SystemFrameworks/SystemFrameworks.html%23//apple_ref/doc/uid/TP40001067-CH210-BBCBEAJD bemerkt, dass sie eine Verknüpfung empfehlen gegen das Accelerate.framework, das ein Umbrella-Framework für vecLib.framework und andere ist. (Wenn Sie ein paar Inches/cm vom Link nach oben scrollen, sehen Sie "vecLib.framework 10.0 N/A Deprecated. Verwenden Sie stattdessen Accelerate.framework. Siehe" Accelerate Framework. "") – NSGod

+0

Für den Fall, dass es sich anhört e sagt vecLib.framework selbst war veraltet, vecLib.framework selbst ist nicht veraltet, nur der Akt der Verknüpfung direkt gegen es anstelle von Accelerate.framework ist veraltet. Hoffe, das ist klarer, sorry. – NSGod

+0

Danke für Ihre Kommentare. Ich verweise gerade auf die Dylib direkt als: /usr/lib/libblas.dylib /usr/lib/libcblas.dylib /usr/lib/liblapack.dylib auf der Linker-Zeile. – Juan

Antwort

1

Sie haben noch keine definitive Lösung (Ich bin immer noch im Prozess C++ zu lernen (und Objective C++) und das Lernen mit diesem Zeug selbst zu tun), aber sie schauen über konnte:

Visibility of Inline Functions

und

Technical Note TN2185: C++ Tips and Tricks for Mac OS X

Was für "Inline-Methoden Versteckt" die aktuelle Einstellung ist? (Doppelklick auf das Ziel in der Gruppen & Files Spalte wechseln Registerkarte zu bauen, nach unten scrollen, um Code-Generierung, oder es ist diese Einstellung:

[GCC_INLINES_ARE_PRIVATE_EXTERN, -fvisibility-inlines versteckt] „Wenn aktiviert, out- Inline-Kopien von Inline-Methoden werden als 'private extern' deklariert. "

+0

Aus irgendeinem Grund hat eine Binärdatei auf Mac OS x all diese Symbolinformationen herumliegen. Die Verwendung von "-visibility = hidden" beim Kompilieren meiner Anwendung behebt das Problem, so dass nur nicht definierte Symbole mit dem Befehl nm aufgelistet werden. Ich benutze jetzt "strip -u -r -arch all myapp". – Juan