IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android NDK编译遇到的一些问题 -> 正文阅读

[移动开发]Android NDK编译遇到的一些问题

在配置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_apishttps://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 vs. LOCAL_LDFLAGShttps://stackoverflow.com/questions/22354041/local-ldlibs-vs-local-ldflags

最后在出错信息里面发现

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 Overflowhttps://stackoverflow.com/questions/18837857/cant-use-enum-class-as-unordered-map-key需要提供hash算子。

我是简单修改为map ok了。

(这里有个疑惑,之前使用cmake构建的时候没问题,换成Android.mk就有问题了,为什么?

补充一下,好像c++14没有这个问题了,我用的是c++11来编的)?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:22:54  更:2022-04-04 12:26:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:48:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码