sigemptyset()NDK UnsatisfiedLinkError dlopen()

时间:2014-09-22 13:24:23

标签: android c android-ndk libc

我的Android NDK应用程序中的某个C代码调用signal.h中定义的sigemptyset()函数。我正在使用NDK-r9构建我的项目。

我的库文件名为“libnative-service.so”在编译完c代码后构建得很好。 但是在运行应用程序时,我收到有关引用sigemptyset()的以下错误。

我错过了什么吗?

09-22 15:13:09.102: E/art(3718): dlopen("/data/app-lib/com.project/libnative-service.so", RTLD_LAZY) failed: dlopen failed: cannot locate symbol "sigemptyset" referenced by "libnative-service.so"...
09-22 15:13:09.103: D/AndroidRuntime(3718): Shutting down VM
09-22 15:13:09.106: E/AndroidRuntime(3718): FATAL EXCEPTION: main
09-22 15:13:09.106: E/AndroidRuntime(3718): Process: com.project, PID: 3718
09-22 15:13:09.106: E/AndroidRuntime(3718): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "sigemptyset" referenced by "libnative-service.so"...

1 个答案:

答案 0 :(得分:2)

此函数似乎是内联声明的:

static __inline__ int sigemptyset(sigset_t *set)
{
    memset(set, 0, sizeof *set);
    return 0;
}

因此它应该已经在已编译的库中解析,而不是由运行时链接填充的依赖项。如果它没有得到解决,那么您的库似乎没有正确构建。

您是否可能链接错误的标题?如果您使用的是非ndk signal.h,则可能无法正确编译此函数的使用。