c++程序移植到android上问题记录

2013-5-30

c++程序移植到android上问题记录_第1张图片

第一个错误解决:

去掉改成#include  函数中并没有用到该头文件。 只有cout cin 会用到这个头文件

第二个错误:

改成#include 

第三个错误:不知道,换了一种编译方式,用ndk编译的。

后面三个错误应该都是由第三个错误引起的

安装了android ndk编译环境。在/android-ndk-r6b 目录下

新建jni文件夹,将要编译的文件拷入其中,编写好Android.mk文件,执行

编译命令 ndk-build 会在上层目录生成libs  obj 两个文件夹。编译好的可执行程序放入了libs/armeabi目录中。貌似libs/armeabi中的test_gnustl_1文件可以解决找不到

头文件#include 引发的问题

我今天按照上面的步骤来编译ztprint时,发现并没有自动生成libs文件夹,头文件#include 又找不到了,接下来就是三个由头文件找不到引发的问题。后面将ztpinpad中的libs文件夹、Application.mk文件(这个貌似需要,我只拷入libs文件夹貌似解决不了问题)拷入才解决这个问题。我测试发现Application.mk文件才是解决这个问题的关键。

因为之前的ztpinpad并不是我编译的,所以这个问题还是不知道是因为什么引发的。

最后两个错误:将class TaskDispatcher中的虚函数换成了纯虚函数。

virtual ~TaskDispatcher()

至于为什么要怎么改,不清楚。

c++程序移植到android上问题记录_第2张图片

c++程序移植到android上问题记录_第3张图片

第一条线:这种问题引起的原因有两个

1:在Makefile中没有包含trace_log_str函数所在的头文件

2select.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++程序移植到android上问题记录_第4张图片

不知道什么原因 可能是跟c++的标准命名空间有关 我把那个函数给注释掉了

c++程序移植到android上问题记录_第5张图片

将c++程序编译成Android文件 找不到lpthread库 参考上面的第二条

c++程序移植到android上问题记录_第6张图片

因为引用的libpublic.so libztprn.so库不是在android ndk 环境下编译的。将这两个库重新在android ndk环境下编译,问题就解决了。

你可能感兴趣的:(Android)