问题描述
我尝试用一行尝试调用 webrtc 音频处理来构建我的 jni 类。
webrtc::AudioProcessing* apm = webrtc::AudioProcessingBuilder().Create();
我还尝试将 libjingle_peerconnection_so.so 链接到我的项目,以便我可以使用来自这个公共库的音频处理的实现。我的 Android.mk 如下所示:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libwebrtc
PATH_TO_WEBRTC := /home/artemy/dev/webrtc_src/src
LOCAL_SRC_FILES := $(LOCAL_PATH)/../../../../libs/$(TARGET_ARCH_ABI)/libjingle_peerconnection_so.so
LOCAL_EXPORT_C_INCLUDES := $(PATH_TO_WEBRTC) $(PATH_TO_WEBRTC)/third_party/abseil-cpp
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := audio_processing_jni
LOCAL_SRC_FILES := audio_proc_jni.cpp
LOCAL_C_INCLUDES := audio_proc_jni.h
LOCAL_LDLIBS := -llog
LOCAL_STATIC_LIBRARIES := libwebrtc
include $(BUILD_SHARED_LIBRARY)
但是项目无法链接:
[armeabi-v7a] Compile++ thumb: audio_processing_jni <= audio_proc_jni.cpp
[armeabi-v7a] SharedLibrary : libaudio_processing_jni.so
ap/audio_proc_jni.cpp:11: error: undefined reference to 'webrtc::AudioProcessingBuilder::AudioProcessingBuilder()'
clang++: error: linker command Failed with exit code 1 (use -v to see invocation)
这是可能的还是我需要找到另一种直接从我的本机代码访问 webrtc 的方法?
解决方法
请检查您的库是如何构建的。我看到预建的库,例如https://github.com/signalapp/libwebrtc-android/tree/master/debug/libs 仅导出 JNI 函数:
% nm --dynamic libwebrtc-android/debug/libs/armeabi-v7a/libjingle_peerconnection_so.so | grep \ T\ | grep -v \ Java_
0017a680 T JNI_OnLoad
您必须重建库,以便链接器不会隐藏您需要的函数。