如何将 libjingle_peerconnection_so.so 链接到项目并从中调用类?

问题描述

我尝试用一​​行尝试调用 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

您必须重建库,以便链接器不会隐藏您需要的函数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...