質問: Androidのadbシェルネイティブプログラムでstlを使用する 私はAndroid ADBシェルから実行したいC ++ユーティリティー・プログラムを移植しようとしています。 そのために、私はAndroid NDKのmake-standalone-toolchain.shスクリプトを使用していて、それを使って自分のプログラムをコンパイルしています。 残念ながら、私はそれを実行しようとすると、私はこのエラーが表示されます: ``` reloc_library[1315]: 16304 cannot locate '_ZNKSs5c_strEv'... CANNOT LINK EXECUTABLE ``` いくつかの研究の後で、私は、これは、libstdc ++にc_str関数が存在しないことを意味しています。私もstlport.soでシンボルを見つけることができず、実際には./sources/cxx-stl/gnu-libstdc++/libs/バージョンのC ++ライブラリでしか見つかりませんでした。これらのライブラリは、私が作ったスタンドアローンのツールチェーンには含まれておらず、デバイス上でも見つかりませんでした(デバイスはHoneycombを実行しています)。 NDKのテキストには、stlportを使用するとSTL全体のサポートが明確に記載されています。これはアイスクリームサンドイッチでのみ正しいことですか? libstlport.soまたはlibsupc ++。soのデバイスとNDKには、見つからなかったような署名はありませんでした。 だから私の質問は2つの部分を持っています: 1. ビルドプロセスやAndroidの設定に欠けているものはありますか?プログラムをgnu-libstc ++を使わなくてもコンパイルできるように、あるいは少なくともデバイスにロードするのではなくコンパイル/リンクエラーで失敗するように、設定を変更することはできますか? 2. gnu-libstc ++とのリンクが唯一の方法であれば、どうすればよいのですか?私は静的にそれにリンクを管理することができると思うが、私はむしろそうしたくない。 どうすればgnu-libstdc ++のバージョンを私のマシンに追加できますか?
回答: 他の誰かが解決策を探していると、libgnustl_shared.soの-lスイッチを使って依存関係を追加しました。あなたはNDK内でそれを見つけることができます ``` sources/cxx-stl/gnu-libstdc++/libs// ``` 次に、この.soをプログラムと一緒にデバイスにプッシュし、現在のディレクトリをLD_LIBRARY_PATHに追加するスクリプトを作成しました。 makeスクリプトを使ってgnustlに依存するプログラムを作成したときのNDKの動作と似ています。