我需要做些什么才能构建(部分)WebRTC for Android(NDK)?它无法找到C ++标头

时间:2018-05-22 14:46:59

标签: android c++ android-ndk webrtc ndk-build

我正在尝试将WebRTC的一些功能构建到项目中。我们之前已经获得了一些仅限C的代码,我正在尝试添加更多文件。新文件是C ++,当我运行ndk-build时,我收到与C ++相关的错误包括:

[armeabi] Compile++ thumb: zello.webrtc <= audio_frame.cc
In file included from libwebrtc/jni/libwebrtc/api/audio/audio_frame.cc:15:
libwebrtc/jni/libwebrtc/rtc_base/checks.h:36:10: fatal error: 
  'sstream' file not found
#include <sstream>
         ^~~~~~~~~
1 error generated.

我的Application.mk个文件包含

APP_ABI := armeabi armeabi-v7a arm64-v8a x86 x86_64
APP_OPTIM := release
APP_PLATFORM := android-15
APP_STL := c++_shared
APP_CPPFLAGS := -fexceptions
NDK_TOOLCHAIN_VERSION := clang

和我的Android.mk文件包含

LOCAL_CPPFLAGS := -std=c++11
LOCAL_CPP_EXTENSION := .cpp .cc
LOCAL_SRC_FILES := \
    webrtc-jni.cpp \
    libwebrtc/api/audio/audio_frame.cc \
    ...

我尝试过明确添加

LOCAL_C_INCLUDES += $(NDK_ROOT)/sources/cxx-stl/llvm-libc++/include

但这只会导致更多关于未定义函数的错误,并且看起来似乎不一定是必要的。我也试过为APP_STL指定所有其他值而没有效果。

我正在使用NDK 16b构建,因为我们仍然需要支持armeabi设备。

提前感谢任何建议。

编辑:当我运行ndk-build V=1时,我发现ndk-build可能使用了错误的STL标头目录:

... -I${NDK_ROOT}/sources/cxx-stl/system/include ...

但我已将APP_STL定义为c++_shared,我认为应该在另一个目录中查看。

1 个答案:

答案 0 :(得分:0)

解决方案是将APP_STL定义放在顶级Application.mk文件中。我们的应用程序结构如

top/Application.mk
top/Android.mk
top/...
top/submodule1/jni/Application.mk
top/submodule1/jni/Android.mk
top/submodule1/jni/...
top/submodule2/jni/Application.mk
top/submodule2/jni/Android.mk
top/submodule2/jni/...
...

我在其中一个子模块APP_STL文件中定义了Application.mk,这些文件可能完全被忽略了?将定义移动到顶级文件使构建正常运行。