1. 查看可执行文件xlisten-arm所需要的动态链接库:
执行语句:
2. 将程序编译的时候选择静态编译,即使用选项 -static
对Makefile文件中的CFLAG变量进行修改:
CFLAGS = -Wall
改为:
CFLAGS = -Wall -static
3. 在Makefile中,修改LIBS变量:
LIBS = -lsqlite3 -lm -lcrypt
改为:
LIBS = -lsqlite3 -lm -lcrypt -lpthread -ldl
然后进行交叉编译,成功了!
4. 编译出来的可执行文件比较大,因为事静态编译的,有2M多,
拷贝到开发板的andriod系统中,
修改权限:
#chmod 777 xlisten-arm
5. 执行:
/ # ./xlisten-arm
这样就能够正确的执行了!
Android系统简介:
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。
安卓也可以用C语言编写,这种方式程序效率高,但需要一些底层知识。。。(即所谓NDK),Android在支持NDK后是可以实现用C和C++来编写的。因为用C++比较多,之前用cocos2d-x写过Demo游戏。就使用了NDK编译出.so文件然后放入Android工程用在Java层调用。Android SDK的Java层是可以通过JNI和C/C++进行数据交互的。详见:
Android NDK | Android Developers
The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++. For certain types of apps, this can be helpful so you can reuse existing code libraries written in these languages, but most apps do not need the Android NDK.
害哥搞这个离线包搞了个把小时。为了清楚,上个图: 敲个LS,什么东西都没有,这个目录是cygwin的安装目录下面的home文件夹下的用户名文件夹。接下来是配置与Android相关的。在home/用户名,这个文件夹下有一个文件为.bash_profile,打开它,到最后添加两行NDK的环境变量:NDK_ROOT=/cygdrive/d/android-ndk-r6export NDK_ROOT上面的意思是,ndk的目录是,d:/android-ndk-r6添加完之后,关闭Cygwin重新启动一下,然后敲入cd $NDK_ROOT,是否进入到ndk的目录了?否则就看看哪个字母错了。在ndk的目录下samples下有很多例子,随便弄个就可编译了。下面是新建一个项目,以对C语言在项目中的位置更清楚。打开Eclipse新建一个Android项目,取名hellojni,为了清晰,便于维护,及各种各样的好处,JNI的JAVA代码单独一个类,单独一个包。其实最好能不用JNI就别用JNI,这东西负作用巨大,特别是在用到JNI复杂的地方,什么内存啊,类型啊,哪里调用的方法,异常啊,可靠性都非常麻烦。非要用JNI的复杂功能,做好两件事,做之前充分设计,设计之前充分学习一下JNI文档。当然对于一些简单的应用,那只需要充分仔细。作好参数,返回值的检查,记得释放内存就行了。