2017-08-08 ruki
如果我们要写跨平台的c/c++代码,很多时候需要处理由于不同编译器对c/c++各个标准支持力度不同导致的兼容性问题,一般通常的解决办法是:自己在代码中通过宏去判断各个编译器的版本、内置宏、标准库宏、__has_feature等来检测处理。 自己如果在代码中按上述的方式检测,会很繁琐,尤其是像c++这种存在大量语法特性,如果一一检测过来,工作量是非常大的。 通过构建工具预先检测编译特性 另外比较省事的方式,就是依赖构建工具提前做好检测,然后把检测结果作为宏添加到编译中去,这样代码只需要判断对应的特性宏是否存在,就可以进行处理了。 在cmake中就有类似的检测机制,非常强大,因此xmake也对其进行了支持,提供更加灵活强大的编译 继续阅读 »
2016-08-06 ruki
有时候可能用到某个库的某些函数接口,但是这个库有可能在某个平台上被裁减过了,接口支持不全,如果你想跨平台使用,就会出问题 因此在使用之前进行检测是否存在这个函数,还是很有必要的,xmake提供了方便的api,可以批量检测某个库的一些函数: 例如: ```lua target("test") -- 检测libc库中,对宽字符操作的接口是否存在,检测条件:检查wchar.h、stdlib.h中是否有函数声明 add_cfuncs("libc", nil, {"wchar.h", "stdlib.h"}, "wcscat", 继续阅读 »
2016-07-12 ruki
为了进一步提升构建效率,减少没必要的重建,xmake新增了对头文件的依赖检测,以及自动构建仅仅需要重新编译的源文件,提升编译速度,并且完全支持windows、linux、macosx等大部分平台。。 由于检测过程本身也会有一些性能损耗,因此xmake对此进行了深度优化,实现极速依赖检测: 对依赖头文件进行过滤,如果是系统头文件,非自身项目的第三方头文件,自动忽略,这些头文件基本上不会再开发项目的时候,经常变动,所以没必要去每次检测他们,如果真有变动,手动重建下就行了 针对每个头文件的检测结果进行缓存,直接应用到下一个源文件上,减少重复检测的次数 其他一些细节优化 继续阅读 »
2016-02-04 ruki
TBOX的内存分配在调试模式下,可以检测支持内存泄露和越界,而且还能精确定位到出问题的那块内存具体分配位置,和函数调用堆栈。 内存泄露检测 内存泄露的检测必须在程序退出的前一刻,调用tb_exit()的时候,才会执行,如果有泄露,会有详细输出到终端上。 c tb_void_t tb_demo_leak() { tb_pointer_t data = tb_malloc0(10); } 输出: [tbox]: [error]: leak: 0x7f9d5b058908 at tb_static_fixed_pool_dump(): 735, memory/impl/stat 继续阅读 »
2016-08-06 ruki
xmake将依赖库、依赖头文件、依赖类型、依赖接口统一用 option 选项机制进行了封装,更在上一层引入package包的机制,使得添加和检测依赖更加的模块化,简单化。。。 下面通过一个具体实例,来看下xmake的包机制怎么使用。。 假如你现在的工程已经有了两个包:zlib.pkg,polarssl.pkg(如何构建包,后续会详细说明,现在可以参考TBOX依赖包下已有包的例子),你的工程目录结构如下: demo - xmake.lua - src main.c - pkg zlib.pkg polarssl.pkg 那么你可以修改xmake.lua来使用上述的两个依赖包: 继续阅读 »
2016-01-18 Piasy
今天迷迷糊糊听见iOS同事对PM说“连击检测”其实只需要传一个参数就行了,我大为震惊,iOS竟有如此炫酷的API,Android似乎没有呀!在google和github搜索两次之后无果,我决定自己实现一个连击检测的库。因为主要使用RxJava实现,所以命名为RxComboDetector,github 源码地址。 继续阅读 »
2015-04-24 刘太华
游戏服务端碰撞检测 最近看了一些游戏碰撞检测相关的一些内容,然后开始读了一些我们游戏里关于碰撞检测的代码,我们游戏里现在的碰撞检测按我暂时阅读完的代码, 应该分为2块,相对来说我们基本的碰撞检测算法是比较简单的, 后面也记录一下网上看到的关于分离轴多边形的碰撞检测。 继续阅读 »
2016-11-14 LEo
本文简单介绍如何通过valgrind检测c语言中的非法读写内存,避免发生不可预测行为。 1 什么非法读写内存 1.1 非法写内存 非法写内存是指往不属于程序分配的内存中写入数据。比如malloc一段内存,大小只有5个字节,那么你只能往这5个字节空间写入数据(如果是拷贝字符串,只能写4个字节),在这5字节的内存空间之外写入数据,都是非法的。比如写数组时越界,拷贝字符串时忘记结尾结束符。 继续阅读 »
2016-01-29 Piasy
应PM需求,YOLO可能会对直播过程中的截屏进行检测并通知其他人,类似于Snapchat,此时iOS同事再次表达了先天优势,iOS系统提供了API呀!Google无果之后决定再次造轮子,为了持续表达对Rx的敬意,命名为RxScreenshotDetector,github 源码地址。 继续阅读 »
2016-06-16 Lu Huang
本节实现的是使用OpenCV里自带的函数,检测出视频里图像中的蓝色和天蓝色、青色,比如我的手机背景、我衣服上的蓝色格子,墙砖的蓝色和学生证照片上的蓝色背景。 设置“蓝色”HSV范围 BGR转HSV 捕获摄像头视频 获取蓝色部分mask 图像按位与操作 显示蓝色部分图像 实现过程 定义视频对象 视频对象用于捕获摄像头视频流。 ``` python import cv2 import numpy as np cap = cv2.VideoCapture(0) ``` 设置HSV中蓝色、天蓝色范围 这里主要参考了这个博客,我设置的颜色范围如下。 ```python set blue thresh lower_blue= 继续阅读 »