在配置Android.mk的时候,遇到了一些问题
1、mk文件没跑
检查代码,极可能是路径写错了,可以用$(warning $(DIR_3RDPARTY)) 打印,用ls 去看看有没有这个路径
变量赋值要用 :=,用=会导致不可预料的问题,例如变量在后续使用中被拼接了其他内容
//DIR_3RDPARTY := $(LOCAL_PATH)/../../3rdparty
### 例如这里写漏了:,直接用 = 赋值
DIR_3RDPARTY = $(LOCAL_PATH)/../../3rdparty
...
$(warning $(DIR_3RDPARTY))
include $(DIR_3RDPARTY)/x/jni/Android.mk
$(warning $(DIR_3RDPARTY))
#### 后面这两个mk没被执行,原因,前后打印DIR_3RDPARTY,发现DIR_3RDPARTY被拼接了其他内容(如/x/jni/Android.mk )!
include $(DIR_3RDPARTY)/xx/jni/Android.mk
include $(DIR_3RDPARTY)/xxx/jni/Android.mk
2、编译提示找不到glxxxx符号
参照下面的博文进行了设置,仍然没效
https://developer.android.com/ndk/guides/stable_apis https://developer.android.com/ndk/guides/stable_apis
【我的OpenGL学习进阶之旅】解决NDK使用OpenGL ES 3.0 的api报错:error: undefined reference to ‘glUnmapBuffer‘_字节卷动的博客-CSDN博客
又对到底使用LDLIBS还是LDFLAGS疑惑,进行了一番搜索。(结论:系统库推荐使用LDLIBS)
最后在出错信息里面发现
LOCAL_LDLIBS is always ignored for static libraries?
我打包的是静态库,没法使用LDLIBS去链接。
最后的解决方法是,在使用这个静态库去编动态库的地方,加上依赖,我用的是GLES2
LOCAL_LDLIBS := -lEGL -lGLESv2
3、LOCAL_CFLAGS += -fPIC
?在mk里面发现很多地方都用了LOCAL_CFLAGS += -fPIC,不管是打包静态库,还是打包动态库,都加了这句。有点疑惑它的作用,特意搜了一下
gcc编译参数-fPIC的一些问题_老徐_新浪博客
编译so动态库要链接.a静态库的时候才需要 fPIC
4、编译静态库的时候,只需要依赖其他库的头文件,不用动态依赖so,因为不会起作用
LOCAL_SHARED_LIBRARIES 在使用到这个静态库去编动态库的地方加即可。
LOCAL_SHARED_LIBRARIES := xx xxx xxxx
include $(DIR_3RDPARTY)/xx/jni/Android.mk
include $(DIR_3RDPARTY)/xxx/jni/Android.mk
include $(DIR_3RDPARTY)/xxxx/jni/Android.mk
5、编译error提示“Implicit instantiation of undefined template”
代码里面使用了unordered_map,使用了enum作为key
c++ - Can't use enum class as unordered_map key - Stack Overflow https://stackoverflow.com/questions/18837857/cant-use-enum-class-as-unordered-map-key需要提供hash算子。
我是简单修改为map ok了。
(这里有个疑惑,之前使用cmake构建的时候没问题,换成Android.mk就有问题了,为什么?
补充一下,好像c++14没有这个问题了,我用的是c++11来编的)?
|