我需要做什么才能为 Android (NDK) 构建(部分)WebRTC?它找不到 C++ headers
What do I need to do to build (parts of) WebRTC for Android (NDK)? It can't find C++ headers
我正在尝试将 WebRTC 的一些功能构建到一个项目中。我们之前已经获得了一些 C-only 代码运行,我正在尝试添加更多文件。新文件是 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 header 目录:
... -I${NDK_ROOT}/sources/cxx-stl/system/include ...
但我将 APP_STL
定义为 c++_shared
,我 认为 应该在不同的目录中查找。
解决方案是将 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/...
...
我在其中一个子模块 Application.mk
文件中定义了 APP_STL
,这可能已被完全忽略?将定义移至顶层文件使构建工作正常。
我正在尝试将 WebRTC 的一些功能构建到一个项目中。我们之前已经获得了一些 C-only 代码运行,我正在尝试添加更多文件。新文件是 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 header 目录:
... -I${NDK_ROOT}/sources/cxx-stl/system/include ...
但我将 APP_STL
定义为 c++_shared
,我 认为 应该在不同的目录中查找。
解决方案是将 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/...
...
我在其中一个子模块 Application.mk
文件中定义了 APP_STL
,这可能已被完全忽略?将定义移至顶层文件使构建工作正常。