我的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"...
答案 0 :(得分:2)
此函数似乎是内联声明的:
static __inline__ int sigemptyset(sigset_t *set)
{
memset(set, 0, sizeof *set);
return 0;
}
因此它应该已经在已编译的库中解析,而不是由运行时链接填充的依赖项。如果它没有得到解决,那么您的库似乎没有正确构建。
您是否可能链接错误的标题?如果您使用的是非ndk signal.h,则可能无法正确编译此函数的使用。