注意点有:
1.前面两个库的引用基本是固定写法,结尾写成
include $(PREBUILT_SHARED_LIBRARY)
2.第三个库为main.cpp,是我们要编译的库,它引用其他.so库的时候,用
3.新建项目默认是没有ndk环境的,需要右键项目AndroidTools里启用NDK环境,如果没有这一步,项目是没有obj文件夹的,之后ndk-build也不会正常编译
这就是一个普通的.cpp文件,所以很多写法要遵守cpp的格式来写,比如头文件的引入,方法的重复定义报的错,都需要一修改
这一步比较简单,命令行进入jni文件夹下,运行ndk-build即可,期间可能会遇到各种问题,百度解决即可,此时的主要问题一般是cpp文件编译的问题
1.遇到一个编译waning问题
在Application.mk中加入这个即可
忽略warning,防止编译不通过
APP_CFLAGS += -Wno-error=format-security
为了编译情况,需要了解一些 常见的 clang 命令
可以看出类的内存:
在OBJC_CLASS_SETUP_$_LGPerson LGPerson的赋值函数中。
cache被赋值了_objc_empty_cache
相关参考和验证: isa的探究
存储着累定义的成员变量,属性,方法,协议数据。相当于源码中的class_ro_t。 由此可以理解 class_ro_t 是编译过程中已经确定的了,可以计算类的空间大小。
struct LGPerson_IMPL 可以看作一个实例对象的世纪内存:
属性会在数量列表中,也会在成员列表中。另外属性也会生成对应的get/set方法。根据修饰词的不同,调用objc_setProperty 并传入不同的参数
在oc中定义的方法,生成了对应的C函数。第一个参数是对象地址。然后会被存储到class_ro_t 的方法列表中
_class_t是类的结构体。有四个成员
使用 clang -rewrite-objc 名称生成oc类对应的编译的cpp文件,主要是为了配合源码学习和了解类的属性,成员变量,方法,协议是怎么存储以及对应到oc源码中的。
caffe实战书籍中提供的编译选项是在cpu-only模式下可以正常编译的,但是如果是使用GPU模式的,就需要将Opencv和Cuda的动态库也链接进来。
.cpp文件如下,
caffe-cpu的情况下
caffe-gpu的情况下
如果使用上面的命令就会提示
编译后可能会出现警告信息,可以不用理会,此时还要注意有没有添加环境变量
运行 /.app ,就可以看到执行效果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)