Android编译c++独立动态库模块时报错总结

因为工作需要,需要将uart的模块移植一下,此模块编译后是动态so,但移植时发现一直编译不过,有遇到以下两种报错,小结一下
1、第一种提示can not find xxx.h
这种情况是由于在编译的Android.mk中没有添加包含xxx.h目录的include的依赖,不会去下去找,所以才提示not find
如下添加进来即可
LOCAL_C_INCLUDES +=$(LOCAL_PATH)/../../common/support/
2、提示 error undefined reference to xxx(xxx一般表示 xxx.h某个接口)
这种的情况是由于找不到接口,为啥找不到呢,上网查了一下,因为在Android.mk中 没有添加包含此接口具体实现的lib库的依赖。因为此接口也是需要编译进到某个库,动态或者静态库,然后需要使用此接口的模块需要添加对此库的依赖才能找到接口的实现。
LOCAL_STATIC_LIBRARIES += libhitvsupport

LOCAL_SHARED_LIBRARIES := \
libhitvmw \

因为之前Android一直有在学习Java,对c++这块才初来试水。
对比一下,发现Java和c++在Android系统中的使用思想很类似。

在Java中,一般你需要使用某个类的话,你需要首先
import com.xxx.android.TvProgram;
1、通过把此类import进来,保证Java模块在编译的时候可以找到此类;
2、需要具体使用此类的一些方法的话,还需要在Android.mk中添加对类的方法实现模块的依赖,此类最后是以什么方式运行的,是静态还是动态库,Android.mk中需要去添加动态或静态依赖,才能正常编译通过。

在C++中,一般当你需要使用某个方法的话,你需要
1、把此包含此方法的xxx.h头文件在使用的文件里面include进来;
2、在编译模块的Android.mk中,
a.去添加包含xxx.h头文件的查找目录
LOCAL_C_INCLUDES +=$(LOCAL_PATH)/../../common/support/
b.去添加包含此方法具体实现的库的依赖,或静态或动态
LOCAL_STATIC_LIBRARIES += libhitvsupport

LOCAL_SHARED_LIBRARIES := \
libhitvmw \
只有这样才可以编译通过。

                                            2016-9-30
                                            上午 11:29

你可能感兴趣的:(Android)