0

macosxアプリケーションから不要なシンボルをすべて削除しようとしています。Linuxアプリで「--strip-unneeded」を使用してこれを行うと、アプリケーションのシンボルテーブルは空になり、何も返されません。

Mac OS Xでは、クラスのtypeinfoおよびvtableエントリに関連するシンボルと、いくつかの関数が表示されます。私が知る限り、これはヘッダーで定義され、インラインでマークされた関数で発生しています。外部ライブラリからの未定義の関数はnm出力に存在しますが、「U」でマークされています。

strip -u-rmyappはそれらを削除していないようです。

それらを削除ファイルに入れて実行しようとしています:strip -u -r -R remove_file.txt myapp

どちらも機能しません。これはモノリシックバイナリであり、共有ライブラリの依存関係はcorefoundationとveclibフレームワークのみです。

何か提案はありますか?

4

1 に答える 1

1

明確な解決策はありませんが(私はまだC ++(およびObjective C ++)を学び、自分でこの問題に対処することを学んでいます)、次のことを確認できます。

インライン関数の可視性

テクニカルノートTN2185:MacOSXのC++のヒントとコツ

「インラインメソッド非表示」の現在の設定は何ですか?([グループとファイル]列でターゲットをダブルクリックし、[ビルド]タブに切り替えて、[コード生成]までスクロールします。または、次の設定になります。

[GCC_INLINES_ARE_PRIVATE_EXTERN、-fvisibility-inlines-hidden] "有効にすると、インラインメソッドのアウトオブラインコピーが'privateextern'として宣言されます。" )。

于 2010-11-21T05:17:53.840 に答える