加载C库时出现问题

时间:2014-10-21 09:50:41

标签: android android-ndk signals

我遇到了问题,我收到此错误:java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "signal" referenced by "libmylib.so"...当我执行下一个代码时:

    signal(SIGTERM, signal_receiver);

此代码存入需要捕获SIGTERM的库中。 Android.mk内容是下一个:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := mylib
LOCAL_SRC_FILES := mylib.c
LOCAL_LDLIBS    := -llog -landroid

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

signal.h上的mylib.c包含也被宣布。我使用Android NDK编写Android应用程序。

我认为这是我在编译时没有包含在libmylib.so中的内容,但我看不出它是什么。

谢谢大家!!

1 个答案:

答案 0 :(得分:0)

arm-none-eabi-objdump -D -x libc.so | grep signal

00009ab8 g     F .text  00000014 bsd_signal
0000b6ec g     F .text  00000014 pthread_cond_signal
0000c6a0 g     F .text  00000014 strsignal
0000c880 g     F .text  00000014 sysv_signal
00009ab8 <bsd_signal>:
0000b6ec <pthread_cond_signal>:
0000c6a0 <strsignal>:
0000c880 <sysv_signal>:

cat signal.h

/* the default is bsd */
static __inline__ __sighandler_t signal(int s, __sighandler_t f)
{
    return bsd_signal(s,f);
}

所以,我的推论是,它试图在你的库中找到“signal()”但实际上它被定义为signal.h中的内联函数并调用“bsd_signal()”并且bionic包含“bsd_signal()” ”