sigemptyset()NDK UnsatisfiedLinkError dlopen()

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

在编译c代码之后,我的库文件名为“libnative-service.so” 。 但是在运行应用程序时,我得到关于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"... 

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

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

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

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