Closed wangzhankun closed 4 years ago
xmake脚本如下:
add_syslinks("pthread","gxiapi","cjson")
add_requires("opencv")
includes("Main")
includes("Interface")
includes("Share")
includes("Detector")
includes("Infantry")
includes("Sentry")
includes("Hero")
includes("Buff")
target("CV")
set_kind("binary")
set_rules("mode.debug", "mode.release")
-- set_optimize("fastest")
add_packages("opencv")
set_languages("cxx11")
这跟xmake有啥关系? xmake也是调用的gcc编译的,即使真是debug下有问题,那也是 compile flags有差异,或者代码里面 部分macro别动导致走到了不同的逻辑,如果都不是,那顶多是gcc有bug了
这种你自行对比下 前后的 compile flags,排查下那个flags给干扰了,自己查下呗。
或者 xmake f --ccache=n 禁用下,然后 xmake -r 重构下 排除cache的干扰。
本来以为可能是xmake在debug里面可能加了优化。后来去查API发现没有优化。目前的测试各种问题可能都有,难以确定。因为我把cczche=n禁用之后重新编译,debug模式下的程序运行可能运行正确,也可能运行错误。但是release模式下编译之后的结果倒是一定是正确的,目前没有发现release下有错误发生。
本来以为可能是xmake在debug里面可能加了优化。后来去查API发现没有优化。目前的测试各种问题可能都有,难以确定。因为我把cczche=n禁用之后重新编译,debug模式下的程序运行可能运行正确,也可能运行错误。但是release模式下编译之后的结果倒是一定是正确的,目前没有发现release下有错误发生。
xmake不会自动加各种flags,初始都是空的,大部分flags都是在用户的xmake.lua里面自己配置的。mode.debug rules里面也是加的基础设置,也是用户自己控制是否生效debug rules
而且即使追加了,上面的verbose命令行输出的也是完整的flags了。。稍微对比下就行,不会有隐含其他的flags
如果觉得还是有隐含的flags存在,你可以通过 xmake project -k makefile生成makefile,然后调用make来编译,makefile里面 的flags肯定是完整全的,然后在里面自己增删Flags,尝试下 是哪个flags干扰了
找到问题了,程序运行结束之后,系统仍然保持了对串口的占用,增加了线程终止机制解决了问题。抱歉。
描述问题
在release模式下,程序可以正常运行打开串口,而在debug模式下运行程序无法打开串口。保证不是串口权限问题或者程序本身问题,因为大量测试结果都指向debug模式编译出的程序是有问题的。初期怀疑是vscode问题,后在gnome-terminal终端中运行发现相同问题。另外发现当debug模式程序按crtl c退出之后会保持对串口的占用。release退出之后系统可以正常释放串口。
期待的结果
debug模式运行的chengy程序也应当能够正常运行以便于调试串口。
错误信息
相关环境
其他信息
release模式下编译信息:
debug模式下编译信息: