使用Android NDK内置编译器为Android编译Linux应用程序

由于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




你可能感兴趣的:(编译器)