使用ndk-r11e编译cocos2dx3.10安卓工程的时候,出现以下错误提示:
signal.h:113: error: undefined reference to 'bsd_signal'
具体原因:
bsd_signal
在android-19 以前都是signal.h
里的内部方法,但是从android-21后没有定义此方法。
但是如果你使用ndk-r10e ,仍然 可以在android-21+平台下编译。
不过最好的办法定义一个通用的方法在任何平台下来使用,具体代码如下:
#if (__ANDROID_API__ > 19)
#include <android/api-level.h>
#include <android/log.h>
#include <signal.h>
#include <dlfcn.h>
extern "C" {
typedef __sighandler_t (*bsd_signal_func_t)(int, __sighandler_t);
bsd_signal_func_t bsd_signal_func = NULL;
__sighandler_t bsd_signal(int s, __sighandler_t f) {
if (bsd_signal_func == NULL) {
// For now (up to Android 7.0) this is always available
bsd_signal_func = (bsd_signal_func_t) dlsym(RTLD_DEFAULT, "bsd_signal");
if (bsd_signal_func == NULL) {
// You may try dlsym(RTLD_DEFAULT, "signal") or dlsym(RTLD_NEXT, "signal") here
// Make sure you add a comment here in StackOverflow
// if you find a device that doesn't have "bsd_signal" in its libc.so!!!
__android_log_assert("", "bsd_signal_wrapper", "bsd_signal symbol not found!");
}
}
return bsd_signal_func(s, f);
}
}
#endif