我正在尝试包装一个c-library(OpenAL-MOB)的一些函数,以便在我的Android应用程序中使用它们。
我认为我的功能未正确导出。
我采取的步骤:
当我尝试在我的Android代码中使用该库时,我能够加载库,但它无法找到我的包装函数。
System.loadLibrary("openal"); // Works
OpenAlConnector.init(); // My wrapped function throws an unsatisfiedlinkerror
我认为我的功能实际上并未导出。
为了添加我的包装函数,我修改了OpenAL-MOB项目中已经存在的Android.mk。我在构建过程中没有遇到任何错误。我唯一做的就是在LOCAL_SRC_FILES的末尾添加2个文件(由javah创建的.c和一个帮助类)。
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../include $(LOCAL_PATH)/../../OpenAL32/Include $(LOCAL_PATH)/../../mob/Include $(LOCAL_PATH)
LOCAL_MODULE := openal-static
LOCAL_SRC_FILES := ../../Alc/ALc.c ../../Alc/alcConfig.c ../../Alc/alcDedicated.c ../../Alc/alcEcho.c ../../Alc/alcModulator.c ../../Alc/alcReverb.c ../../Alc/alcRing.c ../../Alc/alcThread.c ../../Alc/ALu.c ../../Alc/backends/loopback.c ../../Alc/backends/null.c ../../Alc/backends/opensl.c ../../Alc/backends/wave.c ../../Alc/bs2b.c ../../Alc/helpers.c ../../Alc/hrtf.c ../../Alc/mixer.c ../../Alc/mixer_c.c ../../Alc/mixer_inc.c ../../Alc/mixer_neon.c ../../Alc/mixer_sse.c ../../Alc/panning.c ../../mob/alConfigMob.c ../../OpenAL32/alAuxEffectSlot.c ../../OpenAL32/alBuffer.c ../../OpenAL32/alEffect.c ../../OpenAL32/alError.c ../../OpenAL32/alExtension.c ../../OpenAL32/alFilter.c ../../OpenAL32/alListener.c ../../OpenAL32/alSource.c ../../OpenAL32/alState.c ../../OpenAL32/alThunk.c openalwrapper.c org_vansina_openal_OpenAlConnector.c
# set the platform flags
ifeq ($(APP_ABI),x86)
LOCAL_CFLAGS += -D HAVE_SSE
else
LOCAL_CFLAGS += -D HAVE_NEON -mfloat-abi=softfp -mfpu=neon -marm
endif
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := openal
LOCAL_STATIC_LIBRARIES := openal-static
include $(BUILD_SHARED_LIBRARY)
我使用NM查看导出了哪些功能(nm.exe -D libopenal.so)。这就是结果:
00002004 A __bss_start
U __cxa_atexit
U __cxa_finalize
00002004 A _edata
00002004 A _end
我不确定我是否正确,但似乎我的功能缺失了。 有谁知道我能做什么或检查?我的.mk文件中有问题吗?
我现在试着将这个库包装好几天了,而且我已经非常绝望了。非常感谢任何帮助!
修改 我认为它与将库首先构建为静态然后作为共享库有关。如果我创建一个像这样的共享库,似乎所有的符号都会丢失。有人可以给我额外的信息吗?