bsd一直是个官方不咋支持的Android开发平台…… 不过靠着linux兼容层,还是可以混混的……
首先是ndk-build会报不支持的os(FreeBSD)和arch(amd64),而且ndk-build并不会使用环境变量里定义的值。所以有两个办法:
1. 直接调用gmake
env HOST_OS=linux HOST_ARCH=x86 gmake -f $NDK_DIR/build/core/build-local.mk
这样啥都不用改。
2. 修改ndk-build
把HOST_OS设置成linux,HOST_ARCH设置成x86,并且export出来。
再把GNUMAKE设置成gmake,否则会调自带的linux版gmake导致一些麻烦的事情……
然后直接跑就行了。
跑了之后会碰到一个问题:ld会segmentation fault。看系统log可能是因为fallocate和fstatfs64系统调用没有实现的关系。
解决办法是,到ndk目录里的toolchains/*/prebuilt/linux-x86/…/bin/,如果有ld.gold,那把老的ld干掉,改成到ld.bfd的符号链接。老的ld就是ld.gold……
其实就是gold那个新的ld调了一些新的bsd还没实现的linux的system call…… 用老的bfd里的ld就没事了……
BSD好,不过受冷落了。这么好的东西,怎么回事呢?唉~~~