私の Android アプリでは、websocketpp ( http://www.zaphoyd.com/websocketpp ) と libjingle ( https://code.google.com/p/libjingle/ ) の両方をビルドする必要があり、次の問題が発生します。 :
websocketpp は、うまく構築できるブースト ライブラリ (www.boost.org) を使用しています。
APP_STL := gnustl_static
しかし、この設定でlibjingeライブラリをリンクすると、エラーが発生しました:
undefined reference to 'std::__node_alloc::_M_deallocate(void*, unsigned int)'
Application.mk で stlport を使用するように変更した場合:
APP_STL := stlport_static
次に、websocketpp をコンパイルするときにエラーが発生しました。
fatal error: array: No such file or directory
websocketpp には、ここでしか見つけられない配列が含まれています。
sources/cxx-stl/gnu-libstdc++/4.8/include/array
stlport と gnustl の両方のライブラリをリンクできません。定義が重複しているというエラーが表示されたためです。
では、tlport と gnustl の両方を使用できるプロジェクトでこの問題を解決するにはどうすればよいでしょうか?
[アップデート]
プロジェクトで stlport と gnustl の両方を使用することは絶対に不可能なので、どちらかを選択する必要があります。WebRTC は stlport を使用しており、gnustl は GPL の下にあるため、stlport を選択することをお勧めします。
ファイル「boost/tools/build/v2/user-config.jam」にいくつかの変更を加えて、boost ライブラリ (websocketpp で使用) をビルドできます。
<compileflags>-I$(AndroidNDKRoot)/sources/cxx-stl/stlport/stlport
using stlport : android : $(AndroidNDKRoot)/sources/cxx-stl/stlport/stlport ;
stdlib=stlport-android オプションを指定して bjam を実行します。
コンパイルとリンクは成功です。しかし、自分のアプリを実行すると、boost ライブラリでコードを実行するとクラッシュします。
stlport を使用して、Android でブースト ライブラリをビルドして実行することに成功した人はいますか?