2012-05-14 7 views
1

Android NDKでネストされた関数を使用する方法はありますか? NDKはgccを正しく使用しているので可能でしょうか?Androidでネストされた関数NDK

私はmainの中で関数を定義しようとしましたが、コンパイラは単にそれを認識しません。 ここでエラー

エラーです:はい、それは可能なはず入力

+0

質問は不明です。何をしようとしているのかを明記し、失敗した場合はログを入れてください。 –

+0

何を試しましたか? NDKのサンプルプロジェクトを試しましたか?サンプルプロジェクトからメソッドやmain()のコードを取るのは比較的簡単で、何が起こるか見るためにネストする必要があります。 –

+0

このスレッドも見てください:http://stackoverflow.com/questions/2929281/are-nested-functions-a-bad-thing-in-gcc – TheCottonSilk

答えて

1

正確にはわかりません。しかし、NDKがarm gccコンパイラを使用し、ネストされた関数がARM architectureで壊れる可能性があります。私の推測では、ネストされた関数がNDKツールセットで無効になる可能性があります。どのようにしても、ネストされた関数はGCC拡張です。したがって、コードを移植するには、gcc拡張をまったく使用せず、代わりにC89/C90互換のコードを使用してください。

+0

誰かが不思議に思っている場合に備えて、私はそれらをFunctorに置き換えました。 –

0

の終わりに:関数定義は「{」と予想トークン エラー「}」の前にここでは許可されていませんが。 gcc呼び出しに-fnested-functionsフラグを追加する必要があるかもしれません。

+0

LOCAL_CFLAGSに-fnested-functionsを追加しようとしましたが、コンパイラはこのフラグを認識していないようです。 Spits out error:認識できないコマンドラインオプション "-fnested-functions" –

1

hereのネストされた関数の例(foo()にはsquare()が含まれています)がコンパイルされ、Tegra 3上で正常に実行されます。私はNDK r8 android toolchainを使用しています。古いバージョンを使用する場合は、r8で試してみるべきでしょうか?

0

ネストされた関数には実行可能スタックが必要です。実行可能スタックは、Androidではデフォルトで無効になっています。

それはそれを把握するために私の時間の信じられないほどの量を取った - しかし、あなたはあなたのCFLAGSに以下を追加する必要があります。

-z execstack -Wa、 - すべてのベスト

をexecstack!

関連する問題