在 android 上动态链接单声道

linking mono dynamically on android

我已经为 android 成功编译了 monosgen-2.0。当我 link libmonosgen-2.0.a 静态时,我的应用程序运行正常。

但是当我 link libmonosgen-2.0.so 动态时,该应用程序无法运行。 该应用程序根本没有出现,日食也没有给我任何信息。 它只是说致命异常。

这是我的 Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := monosgen
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libmonosgen-2.0.so
LOCAL_EXPORT_C_INCLUDES := F:/monoinstall-arm/include/mono-2.0/
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := hellodroid
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv2
LOCAL_STATIC_LIBRARIES := android_native_app_glue
LOCAL_SHARED_LIBRARIES := monosgen

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

嗯。我不知道是什么问题。但是,如果我通过 dlopen 加载 libmonosgen-2.0.so 并使用 dlsym 获取它的方法,它可以正常工作。

请问您是如何为 android 编译 libmonosgen 的?我使用的是原始的单声道构建脚本,但是生成的 libmonosgen-2.0.so 与 Xamarin Mono 随 Android 应用程序一起提供的 libmonosgen-2.0.so 不同(主要是必需的库不同)。我正在使用这些配置选项:

--with-sgen=yes --disable-boehm --with-monodroid=yes --disable-mcs-build --with-sigaltstack=no --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi

这实际上可以回答你的问题,因为在静态编译中,不需要像在动态链接中那样额外的动态库。