使用ndk-r11e編譯cocos2dx3.10安卓工程的時候阅虫,出現(xiàn)以下錯誤提示:
signal.h:113: error: undefined reference to 'bsd_signal'
具體原因:
bsd_signal
在android-19 以前都是signal.h
里的內(nèi)部方法焚虱,但是從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