Android 编译提示 undefined reference to bsd_signal 解决办法

使用ndk-r11e编译cocos2dx3.10安卓工程的时候,出现以下错误提示:

signal.h:113: error: undefined reference to ‘bsd_signal’

具体原因:

bsd_signalandroid-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
    原文作者:格吾刚哥
    原文地址: https://www.jianshu.com/p/9d98fc8ed73e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞