私はAndroid ADBシェルから実行したいC++ユーティリティープログラムを移植しようとしています。 そのために、私はAndroid NDKのmake-standalone-toolchain.shスクリプトを使用していて、自分のプログラムをコンパイルしています。 。私はこれがc_str関数は、NDKでのように、libstdC++の中に存在していないことを意味しているのを見、いくつかの研究の後Android adbシェルネイティブプログラムでstlを使用
reloc_library[1315]: 16304 cannot locate '_ZNKSs5c_strEv'...
CANNOT LINK EXECUTABLE
:私はそれを実行しようとする 残念ながら、私はこのエラーを取得します。私もstlport.soでシンボルを見つけることができず、実際には./sources/cxx-stl/gnu-libstdc++/libs/バージョンのC++ライブラリでしか見つかりませんでした。これらのライブラリは、私が作ったスタンドアローンのツールチェーンには含まれておらず、デバイス上でも見つかりませんでした(デバイスはHoneycombを実行しています)。
NDKのテキストには、stlportを使用するとSTL全体がサポートされていることが明確に記載されています。これはアイスクリームサンドイッチでのみ正しいことですか? libstlport.soまたはlibsupC++。soのデバイスとNDKには、見つからなかったような署名はありませんでした。
だから私の質問は二つの部分ました:私は、ビルドプロセス/ Androidのセットアップに欠けている何かが
- をありますか?プログラムをgnu-libstC++を必要とせずにコンパイルできるように、あるいは少なくともデバイスにロードするのではなく、コンパイル/リンクエラーで失敗するように、設定を変更することはできますか?
- gnu-libstC++とのリンクが唯一の方法であれば、どうすればいいですか?私はそれに静的にリンクを管理することができると思うが、私はむしろそうしたくない。他の誰かが解決策を探している場合は
どのように私は私の
STL実装(静的stlportまたは静的gnustlなど)を選択するには、Application.mkファイルのAPP_STL変数を使用します(docs/CPLUSPLUS-SUPPORT.htmlファイルを参照)。 –
残念ながら私はスタンドアロンのツールチェーンを使用しているので、私はそれを行うことができません。一般に私はアクティビティをコンパイルしませんが、adbシェル(psやcpに似ています)で実行する予定のLinuxプログラム – nitzanms
次に、ndk-buildがSTL実装を選択する方法を調べます(特定のCFLAGSとLDFLAGSを選択します)。スタンドアロンのツールチェーンに同じコンパイラとリンカーのフラグを選択すれば、静的なSTLライブラリを選択することができます。 –