ndk-build からアセンブリを出力するオプションはありますか? LOCAL_CFLAGS に -save-temp を入れてみましたが、ビルドできませんでした。認識されていないオプションであることがわかります。このリンクhttp://code.google.com/p/vs-android/issues/detail?id=47で主張されているように、Googleがi686-android-linuxで削除したかどうか疑問に思います
2 に答える
これを行うために私が発見した2つの方法があります。
LOCAL_CFLAGS += -save-temps
単一のダッシュとスペルに注意してください(質問に記載されている save-temp ではありません)。ファイルは、ビルドの作業ディレクトリ (通常は最上位のプロジェクト フォルダー) に保存されます。これによりファイルを見つけやすくなりますが、異なるフォルダーに同じ名前の複数のファイルがある場合、または複数の ABI 用にビルドしている場合 (Application.mk で制限できますが)、問題が発生する可能性があります。
別のアプローチでは、オブジェクト ファイルの隣にアセンブリ ファイルを配置する LOCAL_FILTER_ASM を使用します。これは、ソース ディレクトリのレイアウトと一致し、対象となるさまざまな ABI に対してさまざまなパスを使用します。
LOCAL_FILTER_ASM := cp
この変数を設定すると、NDK ビルド出力が最初にアセンブリに作成され、次にコマンドを実行してコンパイラのアセンブリ出力を「フィルター処理」し、フィルター処理された出力をアセンブルします。ソースと宛先のパスを表す 2 つの引数を受け入れるコマンドに設定する必要があります。ありがたいことに、cp
コマンドは既にソースと宛先のパスを受け入れているため、ノーオペレーション フィルターとして直接使用できます。
ビルド後、アセンブリ ファイルは obj/local/[abi]/objs/[module]/__/path-to-file.s にあります。
LOCAL_FILTER_ASM 機能を使用しているため、拡張子が「.filtered.s」のファイルの別のコピーも存在しますが、害はありません。
大雑把な回避策: -S を LOCAL_CFLAGS に入れます。ndk-build を実行すると失敗しますが、./obj/local/armeabi/objs-debug/ で作成された .o ファイルを確認すると、アセンブリが含まれていることがわかります:-)