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,则可能无法正确编译此函数的使用。