使用Android(安卓)NDK内置编译器为Android编译Linux应用程序
16lz
2021-01-26
由于C库的问题,NDK并不能直接编译Linux C应用程序
只需指定--sysroot即可
例如NDK的路径是/develop/android-ndk-r10d
那么--sysroot=/develop/android-ndk-r10d/platforms/android-17/arch-arm
对于其中的android-17,是针对Android 4.2.2
对于不同的Android版本,此处也要指定对应的Android API Level
在Makefile中,完整的编译参数为
/develop/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/develop/android-ndk-r10d/platforms/android-17/arch-arm -Wall -o test test.c
[ 附录 ]
使用NDK开发ELF版本的可执行程序,使用opencv arm sdk库处理图像:
main源码如下:
#include #include #include #include #include #include #include #include int main(int argc, char **argv){cv::Mat image, gray, bin;while(1){system("screencap -p /sdcard/snapshot.png");image = cv::imread("/sdcard/snapshot.png", CV_LOAD_IMAGE_COLOR);cv::cvtColor(image, gray, CV_BGR2GRAY);cv::adaptiveThreshold(gray, bin, 128, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);cv::imwrite("/sdcard/snapshot.jpg", bin);break;}return 0;}
编译指令如下,注意替换路径,NDK_PATH指的是NDK路径,OPENCV_SDK_PATH指的是opencv sdk路径,请到opencv官网下载arm版本sdk包,还有必须说明,编译指令最重要是关于 gnu-libstdc++ STL库的链接问题
{NDK_PATH}\toolchains\arm-linux-androideabi-4.9\prebuilt\windows\bin\arm-linux-androideabi-g++.exe -Wall -pie -fPIE --sysroot={NDK_PATH}\platforms\android-24\arch-arm -I{NDK_PATH}\sources\cxx-stl\gnu-libstdc++\4.9\include -I{NDK_PATH}\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a\include -I{OPENCV_SDK_PATH}\include -L{NDK_PATH}\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a -L{OPENCV_SDK_PATH}\lib -o opencv opencv.cpp -lopencv_highgui -lopencv_imgproc -lopencv_core -llibpng -llibtiff -llibjasper -lIlmImf -llibjpeg -lgnustl_static -llog -lz -lm
更多相关文章
- :Android(安卓)a2sd各种版本和技术解释
- 查看Android的源代码
- 编译出错 ninja: build stopped: subcommand failed Android
- android 反编译 整理
- Android第三方文件选择器aFileChooser使用方法详解
- 避免 Android(安卓)Studio 编译 APK 出现 [MissingTranslation]
- Android反编译工具简介
- 编译libgdx
- android 源码下载及编译