最近接手同事的一份android代碼,但是Jni部分的.c文件中包含#include <linux/videodev2.h>等linux環境下的.h文件。
我想吐槽,移植linux環境中的代碼還是要完全移植為好,或者留下交接文檔,為了編譯so折騰了很久,我根本想到是這個原因導致的,最后是上司嘗試此種方式編譯才發現的,我之前一直以為是NDK版本或者本機環境缺少文件導致的。
使用android studio無法直接編譯,需要在linux環境下才能進行編譯生成so文件。由于本機不具備linux環境,需借助MinGW來編譯。
MinGW環境配置可自行查詢。
進入MinGW。點擊MinGW\msys\1.0中的msys.bat。
這個類似window中的cmd模式。
確保jni文件在你的工程目錄下(如CameraServer\jni)。
在MinGW環境中進入你的工程目錄(如我這里是C:\CameraServer,方便調試隨便放的)。
進入工程目錄后,在此目錄下運行ndk-build(前提是要配置好ndk啊)。
然后工程的lib目錄下就會生成armeabi-v7a的so文件。
參考記錄:
Android NDK學習(4)使用cygwin生成.so庫文件
https://blog.csdn.net/hcb1230/article/details/19401029
使用NDK-r8與Cygwin編譯生成so庫
https://blog.csdn.net/QWZHJ/article/details/52088230
cygwin 生成.so
https://blog.csdn.net/hyjecjtu/article/details/9033447