我遇到了问题,我收到此错误: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
中的内容,但我看不出它是什么。
谢谢大家!!
答案 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()” ”