3

リリースとしてビルドされた(パラメーターなしの「ndk-build」を介して)生成された共有オブジェクトファイル(.so)から、一部の無効な関数が削除されていないことに気付きました。

絶対にどこにも呼び出されないダミー関数を導入したことを証明するため(また、デフォルトの可視性が.so全体ですでに「非表示」に設定されているためエクスポートされません)。どういうわけか、ダミー関数のシンボルはまだ存在しており、生成された.soに対して「nm」を使用することでそれを見ることができます。

Linux11.10ではNDKr8dを使用しています。

デッドコードを削除するためにAndroid.mkに適用する必要がある特定のコンパイラ/リンカーフラグはありますか?

ありがとうございました!

4

1 に答える 1

2

デッド関数を削除すると、バイナリサイズも大幅に削減できます。このために、CおよびC++コンパイルフラグとリンカーフラグを変更しAndroid.mkます。

LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections
LOCAL_CFLAGS += -ffunction-sections -fdata-sections 
LOCAL_LDFLAGS += -Wl,--gc-sections

また、visibilityGCCの機能が役立つ場合があります。 http://gcc.gnu.org/wiki/Visibility

于 2013-03-14T05:12:05.943 に答える