2013-5-30
第一个错误解决:
去掉改成#include <iostream> 函数中并没有用到该头文件。 只有cout cin 会用到这个头文件
第二个错误:
改成#include <string.h>
第三个错误:不知道,换了一种编译方式,用ndk编译的。
后面三个错误应该都是由第三个错误引起的
安装了android ndk编译环境。在/android-ndk-r6b 目录下
新建jni文件夹,将要编译的文件拷入其中,编写好Android.mk文件,执行
编译命令 ndk-build 会在上层目录生成libs obj 两个文件夹。编译好的可执行程序放入了libs/armeabi目录中。貌似libs/armeabi中的test_gnustl_1文件可以解决找不到
头文件#include <deque>引发的问题
我今天按照上面的步骤来编译ztprint时,发现并没有自动生成libs文件夹,头文件#include <deque>又找不到了,接下来就是三个由头文件找不到引发的问题。后面将ztpinpad中的libs文件夹、Application.mk文件(这个貌似需要,我只拷入libs文件夹貌似解决不了问题)拷入才解决这个问题。我测试发现Application.mk文件才是解决这个问题的关键。
因为之前的ztpinpad并不是我编译的,所以这个问题还是不知道是因为什么引发的。
最后两个错误:将class TaskDispatcher中的虚函数换成了纯虚函数。
virtual ~TaskDispatcher()
至于为什么要怎么改,不清楚。
第一条线:这种问题引起的原因有两个
1:在Makefile中没有包含trace_log_str函数所在的头文件
2:select.cpp中引用了c文件,应该用
extern “C”
{
#include “”
}
第二条线:TaskDIspatcher.cpp文件中用到了线程 thread 在编译时要引入线程库 -lpthread
但是Android中该库在libc.so中,在编译时要引入 -lc
参考网上资料-------
在android环境下编译openCore时,遇到找不到lpthread的库的错误,经过核对,在$ndk_root/platform/$android_ndk_version/usr/include下存在pthread的头文件,而链接时找不到对应的库文件,经过多方搜索确认,最终确认pthread是编译在libc.so文件中,所以,需要修改Android_system_extras.mk中的LOCAL_LDLIBS变量值为-lc,编译通过。
第三条:libztprn.so库中用到的函数的头文件找不到
用arm-linux-nm xxx.so可以查看该库中包含的函数
解决办法:在makefile中引入头文件
-I 后面跟头文件路径 -L后跟库路径 引入的库
Eg:
-I../app/inc -L../app/lib -lztprn -lztpublic -lpthread
不知道什么原因 可能是跟c++的标准命名空间有关 我把那个函数给注释掉了
将c++程序编译成Android文件 找不到lpthread库 参考上面的第二条
因为引用的libpublic.so libztprn.so库不是在android ndk 环境下编译的。将这两个库重新在android ndk环境下编译,问题就解决了。