移植zxing(C++)到嵌入式设备

从zxing官网找来用C++编写的zxing源码,需要移植到嵌入式设备上,根据性能需要优化,说说我的移植与优化方式:

1.编译出的目标太大14MB,解码耗时在秒级:首先查看编译选项,SConscript脚本中

cxxflags.append('-O0 -g3 -ggdb')         

 cxxflags.append('-Wall -Wextra -Werror')   

  #-O0 选项说明编译优化等级最低{这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。-O1:这是最基本的优化等级,编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成;-O2:-O1的进阶,-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间,推荐的优化等级;-O3:这个选项会延长编译代码的时间,编译的软件包将产生更大体积更耗内存的二进制文件。-Os:这个等级用来优化代码尺寸。}    

#-g3选项是添加GDB调试信息{该选项可以利用操作系统的“原生格式(native format)”生成调试信息。-g1级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储之用。-g2这是默认的级别,此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。-g3在-g2基础上增加源代码中定义的宏

#-ggdb选项 GCC 为 GDB 生成专用的更为丰富的调试信息

#-Wall编译时显示所有的错误和警告信息

#-Wextra打印一些额外的警告信息。

#Werror把警告当作错误。出现任何警告就放弃编译(通常屏蔽掉这个选项)。

根据需要将这两句改为:

cxxflags.append('-O2)
 cxxflags.append('-Wall -Wextra')

编译出的目标文件1MB,解码耗时在毫秒级!(编译优化等级 -O2测试执行时间大于-O1)

2.进一步优化解码效率和目标文件大小,需要进行代码级的修改,总体思路是将 图像运算过程中的浮点运算全部转为定点运算(如果cpu不支持浮点运算),将大循环条件修改使之在不影响结果的情况下减少循环次数。

猜你喜欢

转载自blog.csdn.net/qishandaxue/article/details/39050057
今日推荐