在星火一号开发板上的出厂例程里,软件包optparse的版本是1.0.1,里面的optparse.c文件的optparse_init函数参数只有两个(options与argv),这个与wavplayer软件包里wavplayer_cmd.c文件的wavplay_args_prase函数里optparse_init的用法一致。但只要更新其他软件包时顺带就会更新optparse软件包,最近版本的optparse软件包里optparse.c文件的optparse_init函数参数有三个(options,argc与argv),这样就会使得wavplayer软件包里的wavplayer_cmd.c文件的wavplay_args_prase函数里optparse_init失效,导致构建错误,即使在wavplayer_cmd.c文件的wavplay_args_prase函数里optparse_init增加argc这个参数,构建会成功,但板子上lcd屏上显示一团乱。想问一下这个问题该如何解决,能否让项目更新软件包时禁止更新optparse软件包?或者改变wavplayer软件包?
options->optind = argv[0]!=0;
这样的的目的,是因为命令行传递的第0个参数argv[0]一般是程序本身的名字,此时赋值optind=1,也就是让从1个参数开始解析,跳过argv[0]
增加argc进入optparse_init我之前提交pr,原因是,optparse之前根据最后一个argv是否为NULL来判断是否退出,这个就看运气了成分了。因此增加argc进入结构体,通过判断options->optind >= options->argc来退出optparse
建议你将optparse老版本覆盖过来,调试下,是否有问题。optparse增加argc之后基本没有修改什么功能代码,我在自己的项目上测试过,理论上不至于导致系统奔溃的。
乱码最大的可能就是指针无效或者飞了,通过optparse传递进来的字符串指针一定在程序运行期间有效且保持不变,否则就会错误。
谢谢您的解答,按照你说的方法已经解决了这个问题,发现主要问题并不在这里。